mysql语句设置超时_mysql语句执行超时设置

- 日理万妓 2022-10-28 00:54 648阅读 0赞

对于 Saas 系统来说,设置语句执行超时时间是必要的,原因有二:

(1)避免一些有性能问题的语句长时间执行占用大量资源,影响其他用户的使用;

(2)避免请求都被中断了服务端还在长时间的执行SQL语句,无谓的消耗资源;

有两种方式来设置执行超时,任选一种:

  1. 客户端代码中设置

例如:使用 mysql 的 .net 驱动

MysqlCommand.CommandTimeout = xxx (秒)

驱动的实现原理:

(1)超时时间到时,驱动会另行和 mysql 建立一个连接;

(2)在新建的连接中,执行 kill query id,请求 mysql 把超时的查询给 kill 掉;

(3)mysql 接受到命令后,主动终止语句的执行,但保留链接,终止后向新连接返回成功消息;

(4)新连接收到消息后,关闭自己;

(5)抛出异常:Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

**

2.服务端设置

**

mysql 5.6 及以后,有语句执行超时时间变量,用于在服务端对 select 语句进行超时时间限制;

mysql 5.6 中,名为: max_statement_time (毫秒)

mysql 5.7 以后,改成: max_execution_time (毫秒)

超过这个时间,mysql 就终止 select 语句的执行,客户端抛异常:

1907: Query execution was interrupted, max_execution_time exceeded.

三种设置粒度:

(1)全局设置

SET GLOBAL MAX_EXECUTION_TIME=1000;

(2)对某个session设置

SET SESSION MAX_EXECUTION_TIME=1000;

(3)对某个语句设置

SELECT max_execution_time=1000 SLEEP(10), a.* from test a;

发表评论

表情:
评论列表 (有 0 条评论,648人围观)

还没有评论,来说两句吧...

相关阅读