是否有一些配置可以在MySQL端完成,以自动终止或超时非常慢的查询,比如说100秒。
答案 0 :(得分:2)
您可以通过以下命令列出所有MySQL查询:
$ mysqladmin processlist
所以你可以运行一些解析该列表的脚本,它会杀死特定的查询。
例如,您可以通过cron运行任何语言的脚本来定期检查长查询,例如:
$result = mysql_query("SHOW FULL PROCESSLIST");
while ($row=mysql_fetch_array($result)) {
$process_id=$row["Id"];
if ($row["Time"] > 200 ) {
$sql="KILL $process_id";
mysql_query($sql);
}
}
另一个例子:
mysql> select concat('KILL ',id,';') from information_schema.processlist
where user='root' and time > 200 into outfile '/tmp/a.txt';
mysql> source /tmp/a.txt;
相关:
了解更多:
答案 1 :(得分:0)
从MySQL 5.1开始,您可以创建一个存储过程来查询information_schmea.PROCESSLIST表,查找符合条件的所有查询(在您的情况下为“长运行时间”)。在查询processlist表时,您可以简单地遍历游标以终止超出超时条件的正在运行的查询进程。
查看以下示例:查找和终止运行时间超过N秒的所有非SUPER和“系统帐户”查询的过程
答案 2 :(得分:0)
您应该查看pt-kill
的percona toolkit命令