MySQL语句超时时间max_execution_time设置

发布于 阅读 8未分类

在 MySQL 中,max_execution_time是一个用于设置查询语句最大执行时间的配置参数,单位为毫秒。 MySQL 5.6 中,名为: max_statement_time MySQL 5.7 以后,改成:max_execution_time 超过这个时间,mysql 就终止 select 语句的执行,客户端抛异常:

SQL
1907: Query execution was interrupted, max_execution_time exceeded.

作用

  • 防止长查询拖垮系统:有些复杂或编写不当的查询可能会执行很长时间,占用大量的系统资源,如 CPU、内存和 I/O 等,从而影响其他查询的正常执行,甚至导致整个数据库系统响应变慢。通过设置max_execution_time,可以强制终止执行时间过长的查询,避免它们对系统资源的过度占用,保证系统的稳定性和可用性。
  • 保证查询性能和响应时间:对于一些对实时性要求较高的业务场景,如在线交易、实时报表展示等,需要保证查询能够在一定时间内返回结果。设置max_execution_time可以确保查询不会无限制地执行下去,从而满足业务对响应时间的要求,提升用户体验。
  • 发现潜在的性能问题:当查询因为超过max_execution_time而被终止时,这通常意味着该查询可能存在性能问题,需要对其进行优化。这有助于开发人员和运维人员及时发现并解决潜在的性能瓶颈,提高数据库的整体性能。

默认值为0

SQL
mysql> select @@max_execution_time;
+----------------------+
| @@max_execution_time |
+----------------------+
|                    0 |
+----------------------+
1 row in set (0.02 sec)

mysql>

实践场景

假设你在一家电商公司工作,负责维护公司的数据库系统。在电商平台的运营过程中,有一个实时订单统计的功能,用于在后台管理界面展示当前的订单数据,包括订单数量、总金额等信息。这个功能会执行一个复杂的 SQL 查询来汇总和计算订单数据。 在高峰期,由于订单数据量巨大,这个查询可能会执行很长时间,导致后台管理界面加载缓慢,甚至出现卡顿现象,影响运营人员对订单的实时监控和处理。为了解决这个问题,你可以设置max_execution_time来限制该查询的执行时间。例如,将max_execution_time设置为 5000 毫秒(5 秒),如果查询在 5 秒内没有执行完成,MySQL 会自动终止该查询并返回错误信息。这样可以保证后台管理界面不会因为这个查询而长时间等待,同时也能促使开发人员对该查询进行优化,以提高其执行效率,确保在规定时间内返回结果,满足运营人员对实时数据的需求。

设置方法

(1)全局设置

SQL
SET GLOBAL MAX_EXECUTION_TIME=1000;
SET MAX_EXECUTION_TIME=1000;

(2)对某个session设置

SQL
SET SESSION MAX_EXECUTION_TIME=1000;

(3)对某个语句设置

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

慎用!

评论 (0)
0 / 500
暂无评论,快来抢沙发~