Мы работаем! Пишите WhatsApp / Viber / Telegram: +7 951 127-23-57, Skype: creograf

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

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

12:58:00 18.10.2010 Комментарии: 1
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

Похожие записи

11:35:30 28.04.2013
Максим
Не заработало...
Описание в статье - супер! Но у меня, к сожалению так и не заработало, попробовал и как вы указали "log-slow-queries=$basedir/logs/slow.log" и "--log-slow-queries=c:/WebServers/usr/local/mysql5/slow.log". Denwer, конечно, перезапускал, работал с сайтом на Denwer - лог пустой. Думал уж может прав к-н не хватает на создание файла - лога создал вручную, все равно пустой. Ошибок при запуске Denwer нет.

Вы можете оставить
комментарий



    
© 2002-2022 Креограф. Все права защищены законом РФ
 Русский /  English