全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

MySQL自我保护参数

发布时间:2023-12-05 16:54:08
发布人:xqq

MySQL自我保护参数,本文再过修改数据库参数的方式达到阻断长时间运行的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 修改参数演示

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

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)

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

mysql> select count(*) from test1;

ERROR 3024 (HY000): Query execution was interrupted, maximum statement execution time exceeded

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工具,修改参数的方式较便捷,但局限性较大,因此需要根据业务需要进行部署。

IT培训

相关文章

嵌入式培训课程:探索技术的无限可能

嵌入式培训课程:探索技术的无限可能

2023-12-12
web前端培训:vue实现双向数据绑定原理

web前端培训:vue实现双向数据绑定原理

2023-12-12
嵌入式开发:Linux系统编程的探索与实践

嵌入式开发:Linux系统编程的探索与实践

2023-12-12
Web前端:探索Web前端开发技术的新领域

Web前端:探索Web前端开发技术的新领域

2023-12-12

最新文章

python培训学校靠谱吗?为什么一定要选择千锋教育

python培训学校靠谱吗?为什么一定要选择千锋教育

2023-12-13
培训学校学java靠谱吗?为什么一定要选择千锋教育

培训学校学java靠谱吗?为什么一定要选择千锋教育

2023-12-13
网络安全哪个培训机构靠谱

网络安全哪个培训机构靠谱

2023-12-13
python培训机构可靠吗?为什么一定要选择千锋教育

python培训机构可靠吗?为什么一定要选择千锋教育

2023-12-13
在线咨询 免费试学 教程领取