设置MAX_EXECUTION_TIME HINTS但是sql未被按照MAX_EXECUTION_TIME终止

一个好的问题描述有利于社区小伙伴更快帮你定位到问题,高效解决你的问题

【TiDB 使用环境】生产环境
【TiDB 版本】5.4.3
【部署方式】物理机混部
【操作系统/CPU 架构/芯片详情】
【机器部署详情】CPU大小/内存大小/磁盘大小
【集群数据量】
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】

SQL如下
SELECT /*+ USE_INDEX( RESULT, IDX_RESULT_SN), MAX_EXECUTION_TIME(60000) */ *
FROM RESULT
WHERE ID=‘64239607’
AND CREATED_T>‘2026-05-27’
AND CREATED_T<‘2026-05-28’
AND APPLY_SN in (
select APPLY_SN
from APPLY b
where SYS_CODE IN (
‘03’,‘123’
)
and (b.DEPT in (‘1730010’,‘1730013’,‘1730016’,‘1780004’,‘1780006’,‘1780007’) or TYPE =‘I’)
and ID not in (
‘42398834’,‘49957872’,‘C460178’,‘60365727’,‘60293207’,‘60015943’,‘47211638’,‘51477246’,
‘50077983’,‘48481112’,‘48341884’,‘45895456’,‘60364623’,‘C734858’
)
)
LIMIT 0,1000

出现一个问题在cpu比较高的情况下,出现了执行时间高达几百秒的sql

explain 看看有warning么


没告警,就是sql比较复杂

不知道是不是这种情况

流程理解:

  1. TiDB 向 TiKV 发送 Coprocessor 请求(如扫描 RESULT 表索引或执行子查询)

  2. TiKV 开始处理(可能耗时几十秒到几百秒)

  3. TiDB 阻塞等待 TiKV 返回

  4. 在 TiDB 等待期间,MAX_EXECUTION_TIME 的定时检查 无法触发

  5. 直到 TiKV 返回数据(或 gRPC 底层超时),TiDB 才有机会检查总执行时间

  6. 如果 TiKV 响应极慢,总执行时间就会远超 MAX_EXECUTION_TIME(60000)

建议解决办法:优化 SQL 和索引,减少 TiKV 层的工作量 ,同时结合 Resource Control (v5.4.3不支持 升级版本)或 Join 改写 来从根本上避免查询失控。

这个问题在7+版本是不是修复了?
7.1版本kv层执行过长,依然被中断了。
mysql> explain select /*+ MAX_EXECUTION_TIME(10) */ * from tidbcs.hot_write_2 d where d.create_time=‘2026-05-22 17:39:39’;
±------------------------±-----------±----------±--------------±---------------------------------------------------------------+
| id | estRows | task | access object | operator info |
±------------------------±-----------±----------±--------------±---------------------------------------------------------------+
| TableReader_7 | 274.50 | root | | data:Selection_6 |
| └─Selection_6 | 274.50 | cop[tikv] | | eq(tidbcs.hot_write_2.create_time, 2026-05-22 17:39:39.000000) |
| └─TableFullScan_5 | 4300000.00 | cop[tikv] | table:d | keep order:false |
±------------------------±-----------±----------±--------------±---------------------------------------------------------------+
3 rows in set (0.01 sec)

mysql> select /*+ MAX_EXECUTION_TIME(10) */ * from tidbcs.hot_write_2 d where d.create_time=‘2026-05-22 17:39:39’;
ERROR 1317 (70100): Query execution was interrupted

单纯 MAX_EXECUTION_TIME hint 只能管控 TiDB 上层计算,无法中断 TiKV 底层长扫描,这是 hint 不生效的本质。

MAX_EXECUTION_TIME 只对只读 SELECT 且需命中该 plan 才生效,全局限制用 tidb_max_execution_time。

tikv-client.copr-req-timeout
有没有配置这个?

告警规则根据业务重要性分级:TiKV磁盘>80%设warning,PD leader切换频繁设critical,慢查询增加设info。

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。