У меня следующий pt-kill daemon
настроить. Он работает, но не убивает такие запросы, как SELECT GET_LOCK(300)
. Если я удалю --ignore-state 'User lock'
это исправит?
sudo /usr/bin/pt-kill --ignore-state 'User lock' --rds --match-command Query --victims all --match-user phppoint --daemonize --busy-time 15 --kill --print h=HOST,u=master,p=PASSWORD,P=3306
Похоже, если я не укажу --ignore-state
по умолчанию заблокировано. Будет ли это работать?
Из руководства:
По умолчанию потоки не будут убиты, если они заблокированы в ожидании другого потока.
Каковы недостатки уничтожения заблокированных запросов?
User lock
The thread is going to request or is waiting for an advisory lock requested with a GET_LOCK() call. For SHOW PROFILE, this state means the thread is requesting the lock (not waiting for it).
Думаю, ваш запрос не попадает в эту категорию. Найдите подходящее состояние для состояния потока и примените то же самое https://dev.mysql.com/doc/refman/8.0/en/general-thread-states.html
Если вы уберете заблокированный запрос, только основные недостатки, которые я вижу, это зависимые приложения / серверные части, может измениться поведение. Перед убийством проверьте SHOW FULL PROCESSLIST
и EXPLAIN
запрос, чтобы знать влияние (Кто / Когда / Что).
Edit1: Итак, сначала проверьте, какой тип потока SELECT GET_LOCK(300)
is и соответствующим образом измените свою команду, если вы выберете правильное состояние, она наверняка будет работать, пока не обнаружит какую-нибудь ошибку.
Надеюсь, это поможет.