Завершение медленных запросов

На наших хостинговых серверах установлена утилита pt-kill, с помощью которой можно принудительно завершать медленные запросы MySQL и логировать их.

Основные опции

  • kill — завершить запросы, подходящие под заданные параметры;
  • print — вывести запросы, подходящие под заданные параметры;
  • busy-time — длительность запроса;
  • interval — как часто проверять наличие запросов, подходящих под заданные параметры (если interval не задан, значением по умолчанию будет половина busy-time);
  • run-time — как долго работать pt-kill (если run-time не задан, pt-kill после запуска будет работать постоянно).

Примеры использования

  • Завершить все запросы к базе с длительностью более 60 секунд:
pt-kill --busy-time 60 --kill --print --user 'база_данных' --password 'пароль_базы_данных'
  • Вывести все запросы длительностью более 60 секунд (не завершая их):
pt-kill --busy-time 60 --print --user 'база_данных' --password 'пароль_базы_данных'
  • Проверять наличие запросов, находящихся в состоянии ожидания, каждые 10 секунд и завершать их:
pt-kill --match-command Sleep --kill --victims all --interval 10 --user 'база_данных' --password 'пароль_базы_данных'
  • Логировать все запросы длительностью более 60 секунд в файл logs.txt:
pt-kill --busy-time 60 --print --user 'база_данных' --password 'пароль_базы_данных' >> /путь/к/файлу/logs.txt
  • Запустить pt-kill на 300 секунд и каждые 10 секунд завершать запросы длительностью более 60 секунд:
pt-kill --busy-time 60 --kill --interval 10 --run-time 300 --user 'база_данных' --password 'пароль_базы_данных'

Запуск pt-kill по cron

Утилиту pt-kill можно также запускать по расписанию, создав задачу через планировщик Crontab в панели. 

Для этого необходимо:

  1. Создать файл скрипта с произвольным именем (например, pt-kill.sh) и сохранить его в необходимой директории аккаунта.
  2. Добавить в файл нужную команду, например:
pt-kill --busy-time 300 --kill --print --interval 5 --run-time 30 --user 'база_данных' --password 'пароль_базы_данных' >> /путь/к/файлу/killed_queries.log
  1. Добавить задачу cron, указав периодичность выполнения и путь до файла, например:

Таким образом, pt-kill будет запускаться каждые 10 минут на 30 секунд, в течение этого времени каждые 5 секунд будет проверять и завершать запросы длительностью более 300 секунд, а также вести лог «убитых» запросов в файл killed_queries.log.

Завершать процессы MySQL можно также с помощью утилиты mysqladmin. Ее использование описано в статье «Основные команды SSH» в разделе «Завершение работы процессов».