MySQL中的自动终止/超时慢查询

时间:2012-02-22 14:42:28

标签: mysql performance mysql-slow-query-log

是否有一些配置可以在MySQL端完成,以自动终止或超时非常慢的查询,比如说100秒。

3 个答案:

答案 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和“系统帐户”查询的过程

http://forge.mysql.com/tools/tool.php?id=106

答案 2 :(得分:0)

您应该查看pt-kill

percona toolkit命令