【发布时间】:2011-06-15 06:00:18
【问题描述】:
我正在寻找一种方法来限制 mysql 服务器上查询的最大运行时间。我认为这可以通过my.cnf 配置文件来完成,但在文档中找不到任何相关内容。有谁知道这是否可以做到?谢谢。
【问题讨论】:
-
这指向一个lock_wait_timeout,这不是我需要的。无论是否获得了锁,我都希望查询过期超时。
标签: mysql long-running-processes
我正在寻找一种方法来限制 mysql 服务器上查询的最大运行时间。我认为这可以通过my.cnf 配置文件来完成,但在文档中找不到任何相关内容。有谁知道这是否可以做到?谢谢。
【问题讨论】:
标签: mysql long-running-processes
从 MySQL 5.7 开始,您可以在 SELECT 查询中包含 MAX_EXECUTION_TIME 优化器提示,以指示服务器在指定时间后终止它。
据我所知,如果您想强制执行服务器范围的超时,或者如果您关心除SELECTs 之外的查询,原始答案仍然是您唯一的选择。
在向服务器发送查询以运行时,无法指定最长运行时间。
但是,在您的数据库服务器上每秒运行一个 cron 作业、连接并执行以下操作的情况并不少见:
【讨论】:
max_execution_time的帖子。
您可以使用如下查询:
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
【讨论】:
与此同时,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.html和https://github.com/twitter/mysql/wiki/Statement-Timeout
【讨论】:
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;
【讨论】: