Page tree

На наших хостинговых серверах установлена утилита 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 можно также запускать по расписанию с помощью cron.

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

1) Создать файл скрипта с произвольным именем (например, pt-kill.sh) и сохранить его в необходимой директории аккаунта.

2) Добавить в файл нужную команду, например:

pt-kill --busy-time 300 --kill --interval 5 --run-time 30 --user 'база_данных' --password 'пароль_базы_данных' >> /путь/к/файлу/killed_queries.log

3) Добавить задачу cron, указав периодичность выполнения и путь до файла:

*/10 * * * * /bin/bash /home/u/user/pt-kill.sh
 
# вместо u и user укажите первую букву логина и сам логин

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

Задание также можно добавить через планировщик Crontab в ПУ:

Завершать процессы MySQL можно также с помощью mysqladmin.

Наверх

  • No labels