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';
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);
}
});
如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~
