【问题标题】:Automatic kill/timeout slow queries in MySQLMySQL中的自动终止/超时慢查询
【发布时间】:2014-01-23 21:11:59
【问题描述】:

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

【问题讨论】:

  • 您需要小心这一点,就好像您设置了类似的东西以在全球范围内操作一样,总是存在杀死大表上的重新索引的风险,这反过来又可能导致损坏。您可以做的是在与 MySQL 服务器接口的应用程序的连接字符串中添加超时

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


【解决方案1】:

您可以通过以下命令列出所有 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;

相关:

阅读更多:

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      你应该检查percona toolkit的命令pt-kill

      【讨论】:

        猜你喜欢
        • 2011-06-24
        • 2014-04-02
        • 1970-01-01
        • 2014-06-16
        • 2011-11-24
        • 1970-01-01
        • 2022-11-18
        • 1970-01-01
        • 2019-09-28
        相关资源
        最近更新 更多