You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 5.7如何记录达到max_execution_time阈值被终止的查询?

MySQL 5.7中获取因max_execution_time终止的查询方法

官方原生方案

  • 利用Performance Schema
    MySQL 5.7默认启用Performance Schema,其中events_statements_history和events_statements_history_long表会记录所有执行过的语句,包括被max_execution_time终止的查询(这类查询的sql_killed_by_timeout字段会标记为1)。可以用以下SQL筛选目标记录:
SELECT sql_text, timer_start, timer_end, sql_killed_by_timeout
FROM performance_schema.events_statements_history
WHERE sql_killed_by_timeout = 1
UNION ALL
SELECT sql_text, timer_start, timer_end, sql_killed_by_timeout
FROM performance_schema.events_statements_history_long
WHERE sql_killed_by_timeout = 1;

注意:这两张表的存储条数有限,若需要留存更多历史记录,可以调整performance_schema_events_statements_history_size和performance_schema_events_statements_history_long_size配置参数,避免新记录覆盖旧数据。

  • 检查错误日志
    当查询因超时被终止时,MySQL错误日志(默认文件名为[主机名].err)会生成包含Query execution was interrupted, maximum statement execution time exceeded的日志条目,里面附带具体SQL语句和客户端连接信息。直接搜索该关键词就能定位到目标查询。

Percona工具方案

  • Percona Server慢查询日志扩展
    如果使用的是Percona Server 5.7(而非原生MySQL),可以通过以下配置让超时终止的查询写入慢查询日志:

    • 开启log_slow_admin_statements和log_slow_slave_statements参数
    • 设置slow_query_log_always_write_time = 0,强制将超时查询记录到慢日志
    • 额外开启log_query_timeout参数,专门记录超时终止的查询
  • pt-kill实时监控记录
    pt-query-digest无法直接解析这类超时记录,但可以用pt-kill实时监控并记录即将被终止的查询。将--busy-time设置为和max_execution_time一致的阈值,命令示例:

pt-kill --match-command Query --busy-time 60 --print --kill --log /var/log/pt-kill-timeout.log

该命令会把符合超时条件的查询打印并记录到指定日志文件,同时终止查询。

内容的提问来源于stack exchange,提问作者Baptiste Mille-Mathias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:15:12