Медленные запросы MySQL: собираем журнал для расследования
Включаем slow query log MySQL на время наблюдения и учитываем настройки уже открытых соединений.
- Настройки журналаПроверяем порог и параметры сеанса
- Сбор запросовНаблюдаем выбранный интервал нагрузки
- РазборИщем причины по запросам и их планам
Пользователи замечают задержки, а при ручной проверке всё быстро. Slow query log помогает поймать запросы в тот момент, когда проблема возникает. Перед включением выберем порог, место хранения и длительность наблюдения. Важно учесть и пул приложения: новые глобальные настройки не всегда меняют уже открытые соединения.
Сначала читаем настройки
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'slow_query_log_file';
SHOW VARIABLES LIKE 'log_output';
SHOW GLOBAL VARIABLES LIKE 'long_query_time';Путь файла относится к серверу базы, а не к компьютеру клиента. Назначение log_output определяет, куда поступает журнал. Не меняйте неизвестный общий режим только ради одной проверки: другие процессы сопровождения могут рассчитывать на существующие настройки.
Ограниченный эксперимент
-- При наличии административных прав и согласованного окна:
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log = ON;Порог в секунду — учебный пример. Глобальное значение long_query_time становится исходным для новых соединений; уже открытый пул может сохранить собственные сеансовые параметры. Поэтому проверяйте соединение, через которое выполняется контрольный запрос, а не только результат SHOW GLOBAL.
Не включайте без необходимости запись всех запросов без индексов. На загруженной системе это может создать большой поток, не связанный с пользовательской задержкой. Журнал показывает подходящие по условиям завершённые запросы и не заменяет наблюдение за текущими блокировками или состоянием сети.
Переходим от записи к гипотезе
Выберите повторяющийся тип запроса, сохраните его план и контекст нагрузки. Удалите чувствительные значения перед передачей фрагмента коллеге. Исправление проверяйте на сопоставимых данных: меньший объём журнала после окончания нагрузки ещё не означает улучшение.
До эксперимента сохраните исходные параметры, а после него верните нужные значения и настройте ротацию журнала. Если наблюдение требуется постоянно, оформите отдельную конфигурацию. Временный SET GLOBAL удобен для проверки, но сам по себе не организует длительное хранение и наблюдение.
