База знаний
Завершение медленных запросов
Завершение медленных запросов
На наших хостинговых серверах установлена утилита 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 в панели.
Для этого необходимо:
- Создать файл скрипта с произвольным именем (например,
pt-kill.sh
) и сохранить его в необходимой директории аккаунта. - Добавить в файл нужную команду, например:
pt-kill --busy-time 300 --kill --print --interval 5 --run-time 30 --user 'база_данных' --password 'пароль_базы_данных' >> /путь/к/файлу/killed_queries.log
- Добавить задачу cron, указав периодичность выполнения и путь до файла, например:
Таким образом, pt-kill
будет запускаться каждые 10 минут на 30 секунд, в течение этого времени каждые 5 секунд будет проверять и завершать запросы длительностью более 300 секунд, а также вести лог «убитых» запросов в файл killed_queries.log.
Завершать процессы MySQL можно также с помощью утилиты
mysqladmin
. Ее использование описано в статье «Основные команды SSH» в разделе «Завершение работы процессов».