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

MySQL中的自动终止/超时慢速查询,mysql,performance,mysql-slow-query-log,Mysql,Performance,Mysql Slow Query Log,是否有一些配置可以在MySQL端完成,以自动终止或超时非常慢的查询,例如100秒 从MySQL 5.1开始,您可以创建一个存储过程来查询信息\u schmea.PROCESSLIST表中所有符合您的条件的查询(在您的例子中为“长运行时间”)。在查询processlist表时,您可以简单地在游标上迭代,以终止超出超时条件的正在运行的查询进程 请看以下示例:查找并终止所有运行时间超过N秒的非超级和“系统帐户”查询的过程 您应该签出的命令您可以通过以下命令列出所有MySQL查询: $ mysqladm

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

从MySQL 5.1开始,您可以创建一个存储过程来查询信息\u schmea.PROCESSLIST表中所有符合您的条件的查询(在您的例子中为“长运行时间”)。在查询processlist表时,您可以简单地在游标上迭代,以终止超出超时条件的正在运行的查询进程

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


您应该签出的命令

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

阅读更多:


您需要小心这一点,因为如果您设置了这样的东西以在全球范围内运行,则始终存在杀死大型表上的reindex的风险,而这反过来可能导致损坏。您可以做的是将超时添加到与MySQL服务器接口的应用程序的连接字符串中