16

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

4

4 回答 4

15

更新

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

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

原始答案

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

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

  1. 显示进程列表
  2. 查找查询时间大于您的最大期望时间的所有连接
  3. 为每个进程运行 KILL [process id]
于 2011-01-25T15:20:08.083 回答
14

您可以使用如下查询:

SELECT MAX_STATEMENT_TIME=1000 * FROM table;

更新:您应该改用max_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

于 2016-02-18T16:31:27.690 回答
5

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

于 2012-05-06T12:24:13.133 回答
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;
于 2016-12-01T14:56:32.520 回答