MySQL自我保护参数

上文(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自我保护参数

文章插图
 
【MySQL自我保护参数】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操作不生效 , 例如:
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工具 , 修改参数的方式较便捷 , 但局限性较大 , 因此需要根据业务需要进行部署 。
1. MySQL高可用之MHA集群部署
2. mysql8.0新增用户及加密规则修改的那些事3. 比hive快10倍的大数据查询利器-- presto
4. 监控利器出鞘:Prometheus+Grafana监控MySQL、redis数据库
5. PostgreSQL主从复制--物理复制
6. MySQL传统点位复制在线转为GTID模式复制
7. MySQL敏感数据加密及解密
8. MySQL数据备份及还原(一)
9. MySQL数据备份及还原(二)




    推荐阅读