ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL修改限制语句最大执行时间

2022-06-03 18:04:20  阅读:199  来源: 互联网

标签:语句 +--------------------+-------+ mysql max MySQL 修改 sec time execution


 

 

上文(MySQL自我保护工具--pt-kill ) 提到用pt-kill工具来kill相关的会话,来达到保护数据库的目的,本文再通过修改数据库参数的方式达到阻断长时间运行的SQL的目的。

1、参数介绍

mysql5.6及以后,数据库端新增了新变量来限制语句最大执行时间,用于在服务端对select语句进行超时时间限制,能有效控制在数据库(建议在主库)的慢查询情况,以达到保护数据库稳定性的目的。

不过mysql5.7.8版本前后参数名有变更,例如:

mysql5.6 - mysql5.7.8前的版本中,参数名为:max_statement_time (毫秒) 

mysql5.7.8及以后,参数改成:max_execution_time (毫秒)

另外,该参数有global 及session 2种级别,即可在部分会话中动态调整本会话的超时时间。

2. 操作演示

在测试环境建一张大表用来演示,该案例可查看历史文章或批量造数据实现。

因当前基本都使用5.7及以后版本,因此本次使用MySQL5.7版本数据库进行演示。

2.1 参数默认值

复制代码
mysql> show global variables like 'max_execution_time';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_execution_time | 0     |
+--------------------+-------+
1 row in set (0.01 sec)
复制代码

默认值为0,代表不限制最大执行时间。

例如执行如下SQL时,运行3s+

复制代码
mysql> select  count(*) from  test1;
+----------+
| count(*) |
+----------+
| 21991575 |
+----------+
1 row in set (3.89 sec)
复制代码

 



2.2 修改参数演示

修改

复制代码
mysql> set session   max_execution_time=1000;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like 'max_execution_time';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_execution_time | 0     |
+--------------------+-------+
1 row in set (0.01 sec)

mysql> show  variables like 'max_execution_time';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_execution_time | 1000  |
+--------------------+-------+
1 row in set (0.00 sec)
复制代码

 

本会话的参数(session级别),演示本次会话的情况,这样不会影响其他会话的运行,如需整个实例调整,则修改全局变量即可。

mysql> select  count(*) from  test1;
ERROR 3024 (HY000): Query execution was interrupted, maximum statement execution time exceeded

此时执行查询,则会因为超过1s而被中断

PS:修改全局变量后,注意已经连接的会话是不生效的,另外,此参数,只对select起作用,对DDL及UPDATE、delete操作不生效,例如:

1 2 3 4 5 6 mysql> set session   max_execution_time=1000; Query OK, 0 rows affected (0.00 sec)   mysql> alter table test1 add tt int ; Query OK, 0 rows affected (25.65 sec) Records: 0  Duplicates: 0  Warnings: 0

 

3. 小结

生产环境较常见的情况是业务代码已经超时退出了与数据库的交互,但是数据库里依旧运行着发起的SQL,如果频繁发起重试,则,慢SQL会越来越多,导致数据库负载高,影响稳定性及可用性。因此,建议部署pt-kill工具或者修改最大执行时间参数,避免长时间运行select语句运行。

相对于pt-kill工具,修改参数的方式较便捷,但局限性较大,因此需要根据业务需要进行部署。

标签:语句,+--------------------+-------+,mysql,max,MySQL,修改,sec,time,execution
来源: https://www.cnblogs.com/manmanblogs/p/16340280.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有