Анализ медленных запросов с помощью pt-query-digest
Mar 24, 2016 09:52 · 209 words · 1 minute read
Найти и исправить медленные запросы к MySQL-серверу можно с помощью pt-query-digest
— утилиты из пакета Percona-toolkit. Давайте разберемся как это сделать на примере ОС Debian Wheezy и Percona Server 5.5!
Для начала необходимо включить логирование медленных запросов (и запросов, которые не используют индексы) в конфигурационном файле /etc/mysql/my.cnf
, для этого необходимо добавить следующие строки:
...
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes
...
или:
...
slow-query-log = 1
log-output = TABLE
long_query_time = 1
log-queries-not-using-indexes
...
Примечание. Во втором случае медленные запросы будут записываться в таблицу slow_log базы данных mysql.
После того, как накопится достаточное для анализа количество запросов, можно использовать утилиту pt-query-digest
. Синтаксис довольно прост:
pt-query-digest /var/log/mysql/mysql-slow.log
Лучше результат анализа сразу сохранять в файл для последующего разбора:
pt-query-digest /var/log/mysql/mysql-slow.log > slowlog.txt
Если в вашем случае медленные запросы записываются не в файл, а в таблицу в базе данных, то сначала используйте следующий запрос:
mysql -u <ПОЛЬЗОВАТЕЛЬ> -p<ПАРОЛЬ> -D mysql -s -r -e "SELECT CONCAT( '# Time: ', DATE_FORMAT(start_time, '%y%m%d %H%i%s'), '\n', '# User@Host: ', user_host, '\n', '# Query_time: ', TIME_TO_SEC(query_time), ' Lock_time: ', TIME_TO_SEC(lock_time), ' Rows_sent: ', rows_sent, ' Rows_examined: ', rows_examined, '\n', sql_text, ';' ) FROM mysql.slow_log" > mysql-slow.log
Ознакомиться со всеми опциями утилиты pt-query-digest
и рассмотреть пример анализа запросов, которые попали в mysql-slow.log
можно здесь.