3

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

4

3 回答 3

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;

有关的:

阅读更多:

于 2014-01-23T13:11:59.520 回答
0

您应该检查percona 工具包的命令pt-kill

于 2012-12-13T09:18:04.743 回答
0

从 MySQL 5.1 开始,您可以创建一个存储过程来查询 information_schmea.PROCESSLIST 表中所有符合您的条件的查询(在您的情况下为“长时间运行”)。在查询 processlist 表时,您可以简单地遍历游标以终止超出超时条件的正在运行的查询进程。

请看以下示例:查找并终止所有运行时间超过 N 秒的非超级和“系统帐户”查询的过程

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

于 2012-02-22T14:58:00.337 回答