Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
SLOW_QUERY_BOTTLENECK Linux / DevOps

Настройка и анализ Slow Query Log в MySQL с помощью pt-query-digest

Обновлено: 21.08.2026
  • Периодические пики загрузки процессора СУБД до 100% при выполнении сложных выборок.
  • Рост времени отклика бекенд-сервисов и накопление блокировок на чтение/запись.
  • Отсутствие прозрачной статистики по неоптимизированным SQL-запросам, выполняющим Full Table Scan.

1. Конфигурация Slow Query Log в MySQL

Добавьте параметры в /etc/mysql/my.cnf:

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log

# Порог времени выполнения запроса в секундах (поддерживаются микросекунды)
long_query_time = 0.5

# Логировать запросы без индексов
log_queries_not_using_indexes = 1
log_throttle_queries_not_using_indexes = 20

# Логировать административные команды (ALTER, OPTIMIZE)
log_slow_admin_statements = 1

Включение на лету:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 0.5;

2. Установка утилиты pt-query-digest

apt-get install -y percona-toolkit || dnf install -y percona-toolkit

3. Анализ и генерация сводного отчета

pt-query-digest /var/log/mysql/mysql-slow.log > /tmp/slow_report.txt
head -n 40 /tmp/slow_report.txt

4. Анализ топ-5 самых медленных запросов в реальном времени

pt-query-digest --limit=5 --order-by Query_time:sum /var/log/mysql/mysql-slow.log
Практический опыт инженера: В отчетах pt-query-digest всегда в первую очередь смотрите на метрику 'Rows examine / Rows sent'. Если база перебирает 1 000 000 строк ради возврата 10 записей, запрос критически требует добавления составного индекса.

Частые вопросы (FAQ)

Какое влияние оказывает включенный slow_query_log на общую производительность MySQL?

При пороге long_query_time >= 0.1s накладные расходы составляют менее 1-2% CPU. При использовании log_queries_not_using_indexes рекомендуется обязательно задавать log_throttle_queries_not_using_indexes, чтобы исключить I/O флуд.

Как выполнить безопасную ротацию файла лога медленных запросов?

Переименуйте файл через mv /var/log/mysql/mysql-slow.log /var/log/mysql/mysql-slow.log.1 и отправьте сигнал серверу: mysqladmin flush-logs.