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

对于 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值