在 MySQL 中,max_execution_time是一个用于设置查询语句最大执行时间的配置参数,单位为毫秒。 MySQL 5.6 中,名为: max_statement_time MySQL 5.7 以后,改成:max_execution_time 超过这个时间,mysql 就终止 select 语句的执行,客户端抛异常:
SQL1907: Query execution was interrupted, max_execution_time exceeded.
作用
- 防止长查询拖垮系统:有些复杂或编写不当的查询可能会执行很长时间,占用大量的系统资源,如 CPU、内存和 I/O 等,从而影响其他查询的正常执行,甚至导致整个数据库系统响应变慢。通过设置max_execution_time,可以强制终止执行时间过长的查询,避免它们对系统资源的过度占用,保证系统的稳定性和可用性。
- 保证查询性能和响应时间:对于一些对实时性要求较高的业务场景,如在线交易、实时报表展示等,需要保证查询能够在一定时间内返回结果。设置max_execution_time可以确保查询不会无限制地执行下去,从而满足业务对响应时间的要求,提升用户体验。
- 发现潜在的性能问题:当查询因为超过max_execution_time而被终止时,这通常意味着该查询可能存在性能问题,需要对其进行优化。这有助于开发人员和运维人员及时发现并解决潜在的性能瓶颈,提高数据库的整体性能。
默认值为0
SQLmysql> 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)全局设置
SQLSET GLOBAL MAX_EXECUTION_TIME=1000; SET MAX_EXECUTION_TIME=1000;
(2)对某个session设置
SQLSET SESSION MAX_EXECUTION_TIME=1000;
(3)对某个语句设置
SQLSELECT max_execution_time=1000 SLEEP(10), a.* from test a;
