MySQL - 我可以限制查询运行所允许的最长时间吗?

时间:2011-01-25 14:39:11

标签: mysql long-running-processes

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

4 个答案:

答案 0 :(得分:14)

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

但是,在数据库服务器上每秒运行一次cron作业,连接并执行类似这样的操作并不罕见:

  1. SHOW PROCESSLIST
  2. 查找查询时间大于最大所需时间的所有连接
  3. 为每个流程运行KILL [流程ID]

答案 1 :(得分:8)

您可以按如下方式使用查询:

SELECT MAX_STATEMENT_TIME=1000 * FROM table;

更新: 您应该使用 max_execution_time 代替。

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

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

答案 2 :(得分:4)

与此同时,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

答案 3 :(得分:2)

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;