【问题标题】:MySQL - can I limit the maximum time allowed for a query to run?MySQL - 我可以限制查询运行的最长时间吗?
【发布时间】:2011-06-15 06:00:18
【问题描述】:

我正在寻找一种方法来限制 mysql 服务器上查询的最大运行时间。我认为这可以通过my.cnf 配置文件来完成,但在文档中找不到任何相关内容。有谁知道这是否可以做到?谢谢。

【问题讨论】:

标签: mysql long-running-processes


【解决方案1】:

更新

从 MySQL 5.7 开始,您可以在 SELECT 查询中包含 MAX_EXECUTION_TIME 优化器提示,以指示服务器在指定时间后终止它。

据我所知,如果您想强制执行服务器范围的超时,或者如果您关心除SELECTs 之外的查询,原始答案仍然是您唯一的选择。

原始答案

在向服务器发送查询以运行时,无法指定最长运行时间。

但是,在您的数据库服务器上每秒运行一个 cron 作业、连接并执行以下操作的情况并不少见:

  1. 显示进程列表
  2. 查找查询时间大于您的最大期望时间的所有连接
  3. 为每个进程运行 KILL [进程 ID]

【讨论】:

  • 根据您的情况,每一秒都可能有点过分。您应该考虑一下是否需要终止进程以防止您的 max_connections 被击中 - 这一切都取决于您特定机器上的负载。
  • 这不再是真的。请查看有关使用max_execution_time的帖子。
【解决方案2】:

您可以使用如下查询:

SELECT MAX_STATEMENT_TIME=1000 * FROM table;

更新: 您应该改用 ma​​x_execution_time

SELECT /*+ MAX_EXECUTION_TIME(1000)*/ * FROM table;

MAX_STATEMENT_TIME 在 MySQL 5.7.8 中被重命名为 max_execution_time。 http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_execution_time

【讨论】:

  • 尝试改进你的答案
【解决方案3】:

与此同时,Twitter 团队发布了他们对 MySQL 的更改,实现了这一点:

- Reduce unnecessary work through improved server-side statement timeout support. This allows the server to proactively cancel queries that run longer than a millisecond-granularity timeout.

http://engineering.twitter.com/2012/04/mysql-at-twitter.htmlhttps://github.com/twitter/mysql/wiki/Statement-Timeout

【讨论】:

    【解决方案4】:

    http://mysqlserverteam.com/server-side-select-statement-timeouts/

    有趣的升级。我会检查它:

    “MySQL 5.7.4 引入了为顶级只读 SELECT 语句设置服务器端执行时间限制的功能,以毫秒为单位”。

    SET GLOBAL MAX_STATEMENT_TIME=1000;
    SET SESSION MAX_STATEMENT_TIME=2000;
    SELECT MAX_STATEMENT_TIME=1000 * FROM table;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      相关资源
      最近更新 更多