我有以下 pt-killdaemon
设置。它可以工作但不会终止查询,例如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
默认设置就会被锁定。这还能用吗?
来自手册:
默认设置是,如果线程被锁定以等待另一个线程,则不会将其杀死。
终止锁定的查询有哪些缺点?
答案1
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
以便您了解影响(谁/何时/什么)。
编辑1:所以首先检查线程的类型SELECT GET_LOCK(300)
并相应地更改您的命令,如果您选择正确的状态,它肯定会起作用,直到遇到一些错误。
希望这会有所帮助。