ttl任务超时

【TiDB 使用环境】生产环境 /测试/ Poc
【TiDB 版本】
【操作系统】
【部署方式】云上部署(什么云)/机器部署(什么机器配置、什么硬盘)
【集群数据量】
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】
TTL的任务每天都会启动但是都是超时

这个任务曾今成功过一段时间

1 个赞

1.确认表是否使用了聚簇索引,以及主键的第一列是否为可分割类型(整数或二进制字符串),对于具有非可分割主键的表(如非整数或非二进制字符串的第一列),TTL 任务会在单个 TiDB 节点上顺序执行,可能导致性能瓶颈。
2. tidb_ttl_job_interval,控制 TTL 后台清理任务的执行频率,如是上面问题,可调小,让任务执行跟频繁,减少单次 TTL 任务处理的数据量
3. tidb_ttl_scan_worker_count,控制用于扫描过期数据的并发工作线程数,可调大,但是要注意对生产的影响
4. tidb_ttl_delete_worker_count,控制用于删除过期数据的并发工作线程数,可调大,但是要注意对生产的影响
另外可以 使用 tidb_ttl_job_schedule_window_start_timetidb_ttl_job_schedule_window_end_time 将 TTL 任务安排在系统负载较低的时段执行,然后将上面3,4两个参数调整大一点,开启更多的并发线程

1 个赞

CREATE TABLE yarn_user_queue_mapping (
cluster varchar(100) NOT NULL,
user varchar(100) NOT NULL,
queue varchar(100) NOT NULL,
update_time timestamp(3) NULL DEFAULT NULL,
PRIMARY KEY (cluster,user,queue) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![ttl] TTL=update_time + INTERVAL 3 DAY */ /*T![ttl] TTL_ENABLE=‘ON’ */ /*T![ttl] TTL_JOB_INTERVAL=‘24h’ */

select count() from dc_rig.yarn_user_queue_mapping;
±---------+
| count(
) |
±---------+
| 220 |
±---------+

数据量很小,目前ttl只有两个表另外一个和他情况一样,worker_count没有设置,应该是和tikv实例一样的

CREATE TABLE yarn_app_statistics (
appid varchar(100) NOT NULL,
cluster varchar(50) NOT NULL,
name varchar(10240) NOT NULL,
user varchar(100) NOT NULL,
queue varchar(100) NOT NULL,
state varchar(50) NOT NULL,
starttime timestamp(3) NOT NULL,
finishtime timestamp(3) NOT NULL,
finalstatus varchar(100) NOT NULL,
memoryseconds bigint NOT NULL,
vcoreseconds bigint NOT NULL,
applicationtype varchar(100) NOT NULL,
dt varchar(100) NOT NULL,
PRIMARY KEY (appid,dt) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![ttl] TTL=finishtime + INTERVAL 3 DAY */ /*T![ttl] TTL_ENABLE=‘ON’ */ /*T![ttl] TTL_JOB_INTERVAL=‘24h’ */

select count() from dc_rig.yarn_app_statistics where finishtime<‘2025-09-06’;
±---------+
| count(
) |
±---------+
| 2618673 |
±---------+
1 row in set (1.16 sec)
mysql> select count() from dc_rig.yarn_app_statistics where date(finishtime)=‘2025-09-06’;
±---------+
| count(
) |
±---------+
| 170545 |
±---------+
1 row in set (1.19 sec)
这张大点的表我们尝试过手动清除历史数据,然后ttl还是没成功,超时

1 个赞

可以升级一下:

v8.5.2 修复了

v8.5.3 修复了

image

推荐升级到 v8.5.3 来解决一下 TTL 的问题

1 个赞

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