TiDB执行SQLMAX_EXECUTION_TIME参数失效问题

【TiDB 版本】 v4.0.4

【问题描述】生产服务SQL执行超时参数 /*+ MAX_EXECUTION_TIME(10000) */ 没有生效 SQL hang住卡死。
然而SQL数值中limit 5000改成4W,3W均卡死 改成2W,1W SQL可以正常执行

4W 3W 2W 卡死是指 SQL 执行超过 10000 秒之后没有被正常 kill 掉么?

是指SQL倒数第二行limit 50000 改成40000 30000 均卡死 但是20000 是OK的 现在疑惑的是为什么参数不生效,而且并没有多出很大的机器负载 麻烦了
SELECT /*+ MAX_EXECUTION_TIME(10000) */ *
FROM (
SELECT tc.customer_account_id, concat(tc.phone_province_name, ‘-’, tc.phone_city_name)
, CASE ro.last_follow_up_status
WHEN 11 THEN ‘电话未接通’
WHEN 10 THEN ‘继续跟进’
WHEN 12 THEN ‘继续跟进’
WHEN 13 THEN ‘下发门店(异店试驾)’
WHEN 33 THEN ‘已有专家跟进’
WHEN 35 THEN ‘成交’
WHEN 20 THEN ‘无效号码’
WHEN 21 THEN ‘观望口碑’
WHEN 22 THEN ‘暂不用车’
WHEN 23 THEN ‘等不及购买其他品牌’
WHEN 24 THEN ‘对新品牌不信任’
WHEN 26 THEN ‘资金不足’
WHEN 27 THEN ‘没有牌照或指标’
WHEN 28 THEN ‘担心异地售后无保障’
WHEN 29 THEN ‘不能安装充电桩’
WHEN 30 THEN ‘购买其他车型’
WHEN 31 THEN ‘提车日期晚’
WHEN 32 THEN ‘其他’
ELSE ‘–’
END AS last_follow_up_status, ro.last_follow_up_content
, CASE ro.intention_level
WHEN 5 THEN ‘H’
WHEN 2 THEN ‘高’
WHEN 4 THEN ‘中’
WHEN 1 THEN ‘有’
WHEN 0 THEN ‘无’
WHEN 10 THEN ‘3天内试驾’
WHEN 15 THEN ‘7天内试驾’
WHEN 20 THEN ‘14天内试驾’
WHEN 25 THEN ‘30天内试驾’
WHEN 99 THEN ‘暂不确定’
ELSE ‘–’
END AS intention_level, DATE_FORMAT(ro.last_follow_up_time, ‘%Y-%m-%d %k:%i:%s’) AS last_follow_up_time
, CASE ro.oppty_status
WHEN 10 THEN ‘新商机’
WHEN 11 THEN ‘待跟进’
WHEN 12 THEN ‘电销跟进中’
WHEN 13 THEN ‘驳回待跟进’
WHEN 20 THEN ‘已下发门店’
WHEN 21 THEN ‘已试驾’
WHEN 30 THEN ‘已锁单’
WHEN 31 THEN ‘已交付’
WHEN 40 THEN ‘战败’
ELSE ‘–’
END AS oppty_status, ud.dept_name, ro.owner_name, ro.first_source_name
, DATE_FORMAT(ro.create_time, ‘%Y-%m-%d %k:%i:%s’) AS create_time
, DATE_FORMAT(ro.first_follow_up_time, ‘%Y-%m-%d %k:%i:%s’) AS first_follow_up_time
FROM saos_tur.rb_opportunity ro
LEFT JOIN saos_tur.tur_customer tc ON ro.customer_account_id = tc.customer_account_id
LEFT JOIN saos_tur.upm_dept ud ON ro.owner_dept_id = ud.id
WHERE tc.account_status = 0
AND ro.is_delete = 0
AND ro.create_time BETWEEN ‘2021-04-07 00:00:00’ AND ‘2021-05-13 23:59:59’
AND ro.owner_dept_id IN (
SELECT id
FROM saos_tur.upm_dept
WHERE dept_code LIKE concat(concat(‘100100100’), ‘%’)
)
ORDER BY ro.last_follow_up_time DESC
LIMIT 50000
) bd_limit_temp limit 0,10

  1. 先确认下 SQL 相关的表统计信息健康度是否是 100 的,如果不是 100 的话,通过 analyze table 收集一下统计信息之后,提供一下统计信息健康度为 100 的情况下的 执行计划情况
    https://docs.pingcap.com/zh/tidb/stable/statistics#表的健康度信息

  2. 可以导出一下统计信息,方便在本地做验证: https://docs.pingcap.com/zh/tidb/stable/statistics#统计信息的导入导出

统计信息后

还是不行

统计信息.zip (1.6 MB)
这里是统计信息 麻烦帮忙查看一下

1、hint 不生效的问题,还需要咱们提供一下,咱们这个 是程序执行的 SQL还是 自己 客户端执行的 SQL

2、改成 3、4 万后的 执行计划,有没有 改变,建议咱们看一下

如果是低版本 mysql 客户端不生效,那么更换为高版本的mysql 客户端,注释会被忽略