我有多个用户在我的应用程序中查询多个数据库。当其中一个用户收到错误“超过锁定等待超时;尝试重新启动事务”我可以执行类似以下操作:
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE `USER`='trial_505813';
那么
KILL 25685;
但我能不能这样做:
KILL (SELECT `ID` FROM INFORMATION_SCHEMA.PROCESSLIST WHERE `USER`='trial_505813')
通过一个查询终止指定用户的所有进程?
1条答案
按热度按时间jtw3ybtb1#
MariaDB有一个
KILL USER <name>
命令:https://mariadb.com/kb/en/kill/MySQL没有实现这个特性,你必须为那个用户获取所有的进程id,然后写一个循环来逐个杀死它们。
Python中的示例:
我不得不说,因为锁等待超时而杀死查询或线程似乎是一个苛刻的解决方案,您可能可以优化查询,使它们不会持有锁太长时间。
如果查询已经过优化,则可能会让事务保持未提交状态的时间过长。事务在完成之前一直保持锁定。因此,需要在查询完成后立即完成事务(COMMIT或ROLLBACK)。