你如何杀死大量的 MySQL 查询?这是一个很好的方法:
mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE user='root' INTO OUTFILE '/tmp/a.txt';
mysql> source /tmp/a.txt;
除了在 MySQL 管理员 GUI 中将它们单击致死之外,还有其他的吗?
你如何杀死大量的 MySQL 查询?这是一个很好的方法:
mysql> SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE user='root' INTO OUTFILE '/tmp/a.txt';
mysql> source /tmp/a.txt;
除了在 MySQL 管理员 GUI 中将它们单击致死之外,还有其他的吗?
要记录Percona 对此的最佳评论:
评论 4:罗伯特·沃尔奇
我更喜欢以下内容,因为它会以多线程方式杀死它们……(有时杀死单个查询可能需要一段时间)
评论 8:Shlomi Noach
一个INFORMATION_SCHEMA.PROCESSLIST 存储过程,复制起来有点冗长。
评论 16:布莱恩
如果您的 MySQL 版本中不存在 information_schema.processlist,则可以在 linux 脚本中使用:
评论 21:安德鲁·沃森
我这样做:
或类似的东西……
正如Dan C 在他对这个问题的回答中提到的那样,修剪 SELECTS 比在流程中终止写入命令要安全得多,因为您可能会丢失数据完整性和/或外键。
另一种解决方案是使用Digg describe的方法,即自动修剪任何花费超过分配时间段才能完成的 SELECT 查询。一般来说,您只想修剪 SELECT 查询,因为它们是只读的,不应影响应用程序的数据完整性。
您可以使用两个这样的实用程序来自动执行此操作,即dbmon.pl和 mkill,它们是名为mtop的包的一部分。
我用它来杀死 MySQL 5.5 数据库服务器上的所有休眠查询:
最简单的方法是从外壳中杀死它们,例如
如果仍然存在问题,请通过以下查询检查详细信息:
在 MySQL 中,根据@Shlomi的帖子尝试以下代码,您可以使用服务器游标创建存储过程,例如:
还有一个
mypgrep.py
由谷歌调用的旧脚本。