Анализ, лог запросов Mysql, оптимизация, статистика sql запросов базы данных Mysql Slow Query Log Optimize, Mysql 8, 5.7, 5.6, 5.5
Для анализа производительности базы данных необходимо включить в файле my.cnf ведение лога медленных запросов mysql.
Запросы к базе данных, выполняемые дольше long_query_time будут записываться в лог файл.
После тестирования сайта можно проанализировать лог файл медленных запросов и выявить наиболее часто повторяющиеся запросы.
Лог медленных запросов - надежный способ фиксации медленных запросов, который позволяет администратору определить какие запросы в первую очередь нуждаются в оптимизации. Начиная с MySQL 5.6 появилась возможность использовать для этой цели Performance Schema, которая имеет более низкие накладные расходы. Однако, лог медленных запросов имеет одно важное преимущество - данные не исчезают (т.к. записываются на диск в отличии от таблиц Performance Schema, которые хранятся в памяти и не используют постоянное дисковое хранилище). В недавно вышедшей MySQL 8.0.14 лог медленных запросов стал более удобным инструментом за счет добавления дополнительных параметров выполнения запроса.
По умолчанию дополнительная информация не записывается в лог, чтобы включить эту опцию используйте переменную log_slow_extra:
SET PERSIST используется для того, чтобы изменения конфигурации сохранились при перезагрузке сервера MySQL. Если вы хотите сначала попробовать новую возможность (а потом уже решать оставить ли её включенной по умолчанию), используйте SET GLOBAL.
Это всё что требуется для настройки. Теперь можно выполнить "медленный" запрос и посмотреть данные, записанные в лог. Простейший способ получить медленный запрос - выполнить DO SLEEP(...), где вместо троеточия указать количество секунд, на которое будет произведена задержка. Однако, это не очень интересный для анализа запрос. Другой путь - уменьшить long_query_time настолько, чтобы запрос попал в лог. Если установить значение long_query_time равным нулю, в лог будут записываться все запросы:
Обратите внимание: Включение лога медленных запросов несет дополнительные накладные расходы. Не рекомендуется использовать его непрерывно с long_query_time = 0 для всех подключений. Это может привести к проблемам с производительностью.
Поэтому в примере выше указан SET SESSION, чтобы изменение long_query_time повлияло только на текущую сессию.
Давайте выполним следующий запрос:
Это приведет к появлению в логе медленных запросов записи вида:
Для сравнения, запись о том же самом запросе при log_slow_extra = OFF будет иметь вид:
Дополнительная статистика записывается только в файл журнала медленных запросов (т.е. log_output равен или содержит значение FILE). При записи лога в системную таблицу эффекта от включения log_slow_extra не будет.
В MySQL 5.7 был изменен формат отображения временных меток в лог файлах. Теперь в качестве разделителя между датой и временем используется символ "Т", а "Z" в конце указывает на использование временной зоны по умолчанию - UTC. Подробнее можно прочитать в другой статье автора - The Format for Timestamps in MySQL Logs
До MySQL 8.0.14 в строке SET timestamp указывалось время, когда запрос был записан в лог, что происходило после того, как запрос завершал работу. Теперь отображается время, когда запрос начал выполняться.
Создайте себе сайт бесплатно! |