功能
SYS.TTL_TASK_HISTORY 记录 TTL(Time To Live)过期数据清理任务的历史信息,用于审计、问题排查和执行效果统计。当 SYS.TTL_TASK 中的任务完成后(状态为 finished 或 cancelled),系统会通过任务回收(GC)流程将完成的任务从 SYS.TTL_TASK 迁移到 SYS.TTL_TASK_HISTORY 中,同时释放 SYS.TTL_TASK 的唯一键占用,允许同一表的下一个任务被写入。SYS.TTL_TASK_HISTORY 不记录进行中的任务(waiting 或 running),仅保留已终态的任务记录。适用版本
TDSQL Boundless V21.6.4.0及以上版本。
字段说明
字段名 | 类型 | 描述 |
task_id | bigint unsigned | 任务唯一标识,对应 SYS.TTL_TASK 中的 task_id,NOT NULL。 |
table_schema | varchar(64) | 数据库名,NOT NULL。 |
table_name | varchar(64) | 表名,NOT NULL。 |
partition_name | varchar(64) | 分区名。非分区表为空字符串。 |
tindex_id | bigint unsigned | 表的存储索引标识 ID,DEFAULT 0。 |
expire_threshold | datetime | 过期阈值时间点。任务下发时计算,下发后固定不变。 |
schema_version | bigint unsigned | 下发任务时的 schema 版本号。 |
batch_size | int unsigned | 单批删除行数。 |
status | ENUM | 任务终态。 finished:已完成。 cancelled:已取消。 |
owner_id | varchar(64) | 执行节点 ID。 |
scheduler_id | varchar(64) | 下发任务的调度节点 ID。 |
strategy | ENUM('scan_then_delete','single_statement','archive_then_delete') | |
on_conflict | enum('STOP','REPLACE') | 如果配置了归档表,归档任务遇到主键/唯一键冲突的处理方式。 |
deleted_rows | bigint unsigned | 累计删除行数,DEFAULT 0。 |
error_message | text | 错误或取消原因。 |
created_at | datetime | 任务创建时间,NOT NULL。 |
started_at | datetime | 任务开始执行时间。 |
finished_at | datetime | 任务结束时间。 |
索引说明
索引名 | 类型 | 字段 | 用途 |
PRIMARY | 主键 | task_id | 保证 task_id 唯一。 |
idx_table_finished | 普通索引 | table_schema, table_name, partition_name, finished_at | 按表名查询历史记录,定位失败任务。 |
idx_finished_at | 普通索引 | finished_at | 按结束时间范围清理或统计。 |
说明:
与
SYS.TTL_TASK 不同,SYS.TTL_TASK_HISTORY 没有唯一约束 uk_table_partition。同一张表(或分区)的历史任务可以同时存在多条记录,不限制活跃任务的数量。相关系统表
系统表/视图 | 说明 |
当前活跃任务及等待回收的终态任务。 | |
已启用 TTL 的表配置信息,包括 TTL 时间列、保留时长、调度间隔、归档表等。 |
示例
查询指定表的任务历史
tdsql> SELECT-> task_id, status, strategy, deleted_rows,-> error_message, created_at, finished_at-> FROM SYS.TTL_TASK_HISTORY-> WHERE table_schema = 'mydb'-> AND table_name = 'operation_log'-> ORDER BY finished_at DESC-> LIMIT 5\\G*************************** 1. row ***************************task_id: 1024status: finishedstrategy: scan_then_deletedeleted_rows: 8500error_message: NULLcreated_at: 2026-07-08 15:25:00finished_at: 2026-07-08 15:30:45*************************** 2. row ***************************task_id: 1015status: finishedstrategy: scan_then_deletedeleted_rows: 9200error_message: NULLcreated_at: 2026-07-08 14:25:00finished_at: 2026-07-08 14:30:30*************************** 3. row ***************************task_id: 1005status: cancelledstrategy: scan_then_deletedeleted_rows: 1200error_message: schema_version changed during execution, task cancelledcreated_at: 2026-07-08 13:25:00finished_at: 2026-07-08 13:28:103 rows in set (0.00 sec)
统计最近7天的 TTL 清理量
tdsql> SELECT-> table_schema, table_name,-> COUNT(*) AS total_tasks,-> SUM(deleted_rows) AS total_deleted_rows,-> AVG(deleted_rows) AS avg_deleted_per_task-> FROM SYS.TTL_TASK_HISTORY-> WHERE finished_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)-> AND status = 'finished'-> GROUP BY table_schema, table_name-> ORDER BY total_deleted_rows DESC-> LIMIT 3\\G*************************** 1. row ***************************table_schema: mydbtable_name: event_logtotal_tasks: 168total_deleted_rows: 8400000avg_deleted_per_task: 50000.0000*************************** 2. row ***************************table_schema: mydbtable_name: operation_logtotal_tasks: 24total_deleted_rows: 204000avg_deleted_per_task: 8500.00002 rows in set (0.01 sec)
查看已取消的任务及原因
tdsql> SELECT task_id, table_schema, table_name, error_message, finished_at-> FROM SYS.TTL_TASK_HISTORY-> WHERE status = 'cancelled'-> AND finished_at >= DATE_SUB(NOW(), INTERVAL 1 DAY)-> ORDER BY finished_at DESC-> LIMIT 3\\G*************************** 1. row ***************************task_id: 1060table_schema: mydbtable_name: orderserror_message: archive insert failed: target table not foundfinished_at: 2026-07-08 15:10:20*************************** 2. row ***************************task_id: 1055table_schema: mydbtable_name: logserror_message: ttl_enable is OFF, task cancelledfinished_at: 2026-07-08 14:50:052 rows in set (0.00 sec)