Анализ медленных запросов с помощью pt-query-digest

Mar 24, 2016 09:52 · 209 words · 1 minute read percona percona-toolkit debian

Найти и исправить медленные запросы к 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 можно здесь.

tweet Share