Что такое Slow Query Log
Slow Query Log фиксирует SQL-запросы, которые выполняются дольше заданного времени. Это главный инструмент диагностики производительности базы данных: он показывает, какие запросы нагружают сервер, и помогает найти запросы, которым нужны индексы.
Включение через my.cnf
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
min_examined_row_limit = 100# Применить без перезапуска (MySQL 5.1+)
mysql -u root -p -e "
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
SET GLOBAL long_query_time = 1;
SET GLOBAL log_queries_not_using_indexes = 1;"Параметры Slow Query Log
| Параметр | Значение | Описание |
|---|---|---|
long_query_time | 1–2 сек | Запросы длиннее этого времени логируются |
log_queries_not_using_indexes | ON | Логировать запросы без индексов |
min_examined_row_limit | 100 | Минимум просмотренных строк для логирования |
Анализ через mysqldumpslow
# Топ 10 самых медленных запросов
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
# Топ 10 по количеству выполнений
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log
# С сортировкой по avg time
mysqldumpslow -s at -t 10 /var/log/mysql/slow.logАнализ через pt-query-digest (рекомендуется)
# Установка Percona Toolkit
sudo apt install percona-toolkit
# Анализ slow log
pt-query-digest /var/log/mysql/slow.log
# Топ запросы за последние 24 часа
pt-query-digest --since=24h /var/log/mysql/slow.log
# Вывести в файл
pt-query-digest /var/log/mysql/slow.log > /tmp/slow_report.txtИспользование EXPLAIN для оптимизации
-- Анализ конкретного запроса
EXPLAIN SELECT * FROM orders WHERE status = 'pending' AND created_at > '2024-01-01';
-- Подробный анализ (MySQL 5.6+)
EXPLAIN FORMAT=JSON SELECT ...;
-- Выполнить и показать реальный план
EXPLAIN ANALYZE SELECT ...;Ключевые поля EXPLAIN: смотрите на
type (должно быть ref/eq_ref/const, не ALL), rows (меньше = лучше) и Extra (Using filesort, Using temporary — плохие признаки).