Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

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.

Полезные материалы
Рекомендуем