如何定期杀死已经存活“太久”的MySQL查询?
是否有一个系统信息表,显示所有当前查询及其年龄?
编辑:从“查杀连接”到“查询查询”的更新问题
答案 0 :(得分:4)
安装RubyGem mysql_manager
(sudo gem install mysql_manager
),然后运行如下命令:
mysql-manager --kill --kill:user api --kill:max-query-time 30 --log:level DEBUG
如需更多选项,请运行mysql-manager --help
。
您可能需要指定替代--db:dsn
,--db:username
或--db:password
。
答案 1 :(得分:2)
你可以执行......
SHOW FULL PROCESSLIST;
...向您显示当前正在执行的查询。
但是,您不应该只是终止连接,因为这可能会导致数据完整性问题。相反,您应该使用流程列表输出作为在源头纠正问题之前突出显示潜在问题的方法。 (从某种意义上说,这是一个(非常)穷人的MySQL Enterprise Monitor。)
答案 2 :(得分:2)
MySQL 5.0.x仅支持“SHOW FULL PROCESSLIST”命令。没有能力查询和过滤进程列表,因为它是一个SQL表,例如SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST。在MySQL 5.1 +
中添加了此功能MySQL有一个KILL命令可以杀死查询或整个连接。 http://dev.mysql.com/doc/refman/5.0/en/kill.html
但是,您需要一个运行“SHOW FULL PROCESSLIST”的Ruby或Perl脚本,识别哪些查询“运行时间太长”,然后发出相应的KILL命令。
您也可以从命令行执行此操作,例如
mysqladmin processlist
mysqladmin kill
答案 3 :(得分:0)
命令“mysqladmin processlist”将显示当前连接,“时间”列指示自上次活动以来的时间。 您可以使用SQL命令“SHOW FULL PROCESSLIST;”
执行相同的操作