Fork me on GitHub

Mysql执行超时报错General error: 3024 Query execution was interrupted, maximum statement execution time exceeded

超时原因

服务端限制

MySQL 从 5.7.4 起引入了 max_execution_time 参数(单位:毫秒),用于限制 SELECT 查询的最大执行时间,以避免长时间运行的查询占用资源。

# 配置文件my.cnf 或 my.ini
[mysqld]
max_execution_time = 10000

# 查看当前会话执行时间限制
SHOW VARIABLES LIKE 'max_execution_time';

image
max_execution_time为0表示服务端没有限制

客户端限制

PHP(PDO、mysqli)中设置了 max_execution_time(常见!)
例如 Laravel、ThinkPHP、Yii2 等框架可能设置了超时限制。

PHP 层控制了查询时间,比如:

$pdo->setAttribute(PDO::ATTR_TIMEOUT, 1); // 单位是秒

比如有超时机制,强制中断执行缓慢的 SQL。

sql添加/+MAX_EXECUTION_TIME(12000)/MySQL查询优化器 hint(提示语法),告诉 MySQL 限制这条语句最多执行 12000 毫秒(即 12 秒)。

SELECT
/*+MAX_EXECUTION_TIME(12000)*/
	* 
FROM
	tbl_log_2025 

数据库连接代理

ProxySQL、MyCat、Vitess、ShardingSphere

调试SQL

Thinkphp6打印sql执行时长

                DB::listen(function ($sql, $time, $explain) {
                    $microTime = microtime(true);
                    $dateTimeWithMs = date('Y-m-d H:i:s.', (int)$microTime) . sprintf('%03d', ($microTime - floor($microTime)) * 1000);

                    dump("[{$dateTimeWithMs}] [SQL] {$sql} ({$time}s)");
                    if (!empty($explain)) {
                        dump($explain);
                    }
                });
posted @ 2025-05-07 11:11  秋夜雨巷  阅读(497)  评论(0)    收藏  举报