Записи по тегу mysql

Анастасия

Смена кодировки сайта на perl'e с window-1251 на utf8

Максимально автоматизированный способ перевода сайта с windows-1251 на utf-8.

читать дальше

Теги: mysql,perl,utf-8
Анастасия

Резервное копирование одной таблицы из mysql

Скрипт делает резервную копию таблицы в файл с именем table.01-12-2010.sql и удаляет резервные копии старше 7 дней:

#!/bin/bash
cd dumptable
NOW=$(date +"%m-%d-%Y");
FILE="table.$NOW.sql";
#echo $FILE
mysqldump -u user -h host -ppassword db table_name >$FILE
ls -t | tail -n+8 | xargs -I rm '{}'

его надо записать в крон в виде
/bin/sh путь и имя файла

 

Теги: mysql
Анастасия

Борьба с тормозами в mysql

1. Надо определить тормозащие запросы. Для этого надо запустить mysqld с опциями:
--log-slow-queries=путь_к_логу - будет записывать все медленные запросы
--long_query_time=время_в_секундах - медленный запрос выполняется не быстрее, чем long_query_time. Минимальное значение 1, по-умолчанию 10.
--log-slow-admin-statements - записывать в логи административные запросы, такие как OPTIMIZE TABLE, ANALYZE TABLE, ALTER TABLE.
--log-queries-not-using-indexes - записывать в логи запросы, не использующие индексы.
Если mysql работает под windows в denwer, то надо поредактировать файл z:\denwer\scripts\init.d\mysql.pl. В выражение:

my $cmd = join " ", (
"start $exe",
($exe=~/mysqld-max/? ("--defaults-file=$config") : ()),
"--user=root",
"--standalone",
# "--init-connect=\"insert into mysql.test set test=current_timestamp()\"",
"--basedir=$basedir",
"--character-sets-dir=$basedir/share/charsets",
# включить логи{
"--log-slow-queries=$basedir/logs/slow.log",
"--log-slow-admin-statements",
"--long_query_time=1",
"--log-queries-not-using-indexes",
# }конец
($CNF{mysql_args}||""),
);

2. Последить залогами, поанализировать. Например, можно использовать mysqldumpslow:
mysqldumpslow [опции] [файл_с_логами ...]
Полезные опции:

-g pattern - анализировать запросы, соответствующие шаблону /pattern/, например /select.*TableName/i
-s sort_type - варианты сортировки:
t, at: по времени запроса
l, al: по времени блокировки
s, as: по количеству строк



3. Пооптимизировать:
Добавить индексы.

При постраничном выборе для получения общего количества записей используйте SQL_CALC_FOUND_ROWS и SELECT FOUND_ROWS(); При использовании SQL_CALC_FOUND_ROWS MySQL кеширует выбранное количество строк(до применения LIMIT) и при SELECT FOUND_ROWS() только отдает это закешированное значение без необходимости повторного выполнения запроса.

Можно использовать INSERT ... ON DUPLICATE KEY UPDATE ... вместо выборки и INSERT или UPDATE после нее, а также часто вместо REPLACE

Попробывать GROUP_CONCAT


P.S. Может пригодится
http://myprofi.sourceforge.net/ - статистика по наиболее частовыполняемым запросам
http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html - встроенный профайлер
http://www.mysqlperformanceblog.com - блог
http://www.mysql.ru/docs/man/Estimating_performance.html
Теги: mysql
© 2002-2016 Креограф. Все права защищены законом РФ
 Русский /  English