一、功能
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。同一张表(或分区)的历史任务可以同时存在多条记录,不限制活跃任务的数量。
五、相关系统表
| 系统表/视图 | 说明 |
| SYS.TTL_TASK | 当前活跃任务及等待回收的终态任务。 |
| INFORMATION_SCHEMA.TTL_TABLES | 已启用 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: 1024 status: finished strategy: scan_then_delete deleted_rows: 8500 error_message: NULL created_at: 2026-07-08 15:25:00 finished_at: 2026-07-08 15:30:45*************************** 2. row *************************** task_id: 1015 status: finished strategy: scan_then_delete deleted_rows: 9200 error_message: NULL created_at: 2026-07-08 14:25:00 finished_at: 2026-07-08 14:30:30*************************** 3. row *************************** task_id: 1005 status: cancelled strategy: scan_then_delete deleted_rows: 1200 error_message: schema_version changed during execution, task cancelled created_at: 2026-07-08 13:25:00 finished_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: mydb table_name: event_log total_tasks: 168total_deleted_rows: 8400000avg_deleted_per_task: 50000.0000*************************** 2. row *************************** table_schema: mydb table_name: operation_log total_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: 1060 table_schema: mydb table_name: orders error_message: archive insert failed: target table not found finished_at: 2026-07-08 15:10:20*************************** 2. row *************************** task_id: 1055 table_schema: mydb table_name: logs error_message: ttl_enable is OFF, task cancelled finished_at: 2026-07-08 14:50:052 rows in set (0.00 sec)