一、功能
终态任务(finished 或 cancelled)会被任务回收(GC)流程迁移到 SYS.TTL_TASK_HISTORY 历史表中,sys.ttl_task 仅保留活跃任务和近期终态任务。
二、适用版本
TDSQL Boundless V21.6.4.0及以上版本。
三、字段说明
| 字段名 | 类型 | 描述 |
| task_id | bigint unsigned | 任务唯一标识,自增主键,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 | 过期阈值时间点。任务下发时计算为 NOW() – INTERVAL <duration> <unit>,下发后固定不变。 |
| schema_version | bigint unsigned | 下发任务时的 schema 版本号。运行中若源表 schema_version 发生变化,任务会被取消。 |
| batch_size | int unsigned | 单批删除行数,取自系统变量 ttl_delete_batch_size,DEFAULT 1000。 |
| status | ENUM | 任务状态。waiting(默认值):等待执行。running:执行中。finished:已完成。cancelled:已取消。 |
| owner_id | varchar(64) | 执行节点 ID,获取任务时写入该节点的标识。 |
| owner_hb_time | datetime | 心跳时间。运行中任务定期更新,若超过2分钟无心跳更新,其他节点可接管。 |
| created_by | ENUM | 任务创建来源。scheduler(默认值):系统自动下发。manual:通过 dbms_admin.ttl_submit() 手动触发。 |
| scheduler_id | varchar(64) | 下发任务的调度节点 ID。 |
| strategy | ENUM | 实际执行策略。获取任务后根据表结构、索引和归档配置选择策略并写入。详细请参见执行策略说明。 |
| on_conflict | enum('STOP','REPLACE') | 如果配置了归档表,归档任务遇到主键/唯一键冲突的处理方式; |
| deleted_rows | bigint unsigned | 已删除行数,执行过程中累计更新,DEFAULT 0。 |
| error_message | text | 错误或取消原因。任务失败或取消时写入具体原因。 |
| created_at | datetime | 任务创建时间,DEFAULT CURRENT_TIMESTAMP,NOT NULL。 |
| started_at | datetime | 任务开始执行时间,获取任务时写入。 |
| finished_at | datetime | 任务结束时间,任务转为 finished 或 cancelled 时写入。 |
注意:说明:
注意:该表设有唯一约束 uk_table_partition (table_schema, table_name, partition_name),确保同一张表(或分区)同时只有一个活跃任务。
四、状态流转
| 状态 | 说明 | 触发条件 |
| waiting | 等待执行 | 系统下发任务或手动触发 dbms_admin.ttl_submit()。 |
| running | 执行中 | 执行节点获取任务并开始清理过期数据。 |
| finished | 已完成 | 任务正常执行完成。 |
| cancelled | 已取消 | 任务被中止。常见原因:全局开关 ttl_enable 关闭、超出调度窗口、源表 schema_version 变更(DDL 并发冲突)、归档失败。 |
注意:说明:
五、执行策略说明
| 策略 | 说明 | 适用场景 |
| single_statement | 直接执行单条 DELETE … WHERE ttl_col < expire_threshold LIMIT batch_size 语句。 | TTL 列上存在合适索引,或表无显式主键的场景。 |
| scan_then_delete | 先扫描一批过期数据的主键,再按主键列表执行删除。 | 表有显式主键但 TTL 列无合适索引的场景,可将删除收敛到明确的主键集合。 |
| archive_then_delete | 先扫描本批过期数据,写入归档表后再从源表删除。 | 源表配置了 TTL_ARCHIVE_TABLE 时强制使用,优先级高于全局 ttl_delete_strategy。 |
注意:若配置了归档表但归档步骤失败,当前任务会失败退出并标记为 cancelled,不会静默降级为直接删除。
六、相关系统表
| 系统表/视图 | 说明 |
| SYS.TTL_TASK_HISTORY | 历史任务记录,用于审计、问题排查和执行效果统计。终态任务经任务回收(GC)流程从 sys.ttl_task 迁移至此表。 |
| INFORMATION_SCHEMA.TTL_TABLES | 已启用 TTL 的表配置信息,包括 TTL 时间列、保留时长、调度间隔、归档表等。 |
七、查询正在执行的任务
tdsql> SELECT * FROM SYS.TTL_TASK WHERE status = 'running' LIMIT 2\\G*************************** 1. row *************************** task_id: 1024 table_schema: mydb table_name: operation_log partition_name: tindex_id: 288230376151711744 expire_threshold: 2026-07-01 00:00:00 schema_version: 4 batch_size: 1000 status: running owner_id: 3d2f1a8b-****-****-****-************ owner_hb_time: 2026-07-08 15:30:12 created_by: scheduler scheduler_id: 3d2f1a8b-****-****-****-************ strategy: scan_then_delete on_conflict: NULL deleted_rows: 8500 error_message: NULL created_at: 2026-07-08 15:25:00 started_at: 2026-07-08 15:25:01 finished_at: NULL*************************** 2. row *************************** task_id: 1025 table_schema: mydb table_name: user_sessions partition_name: tindex_id: 288230376151711745 expire_threshold: 2026-07-08 13:00:00 schema_version: 2 batch_size: 1000 status: running owner_id: 5a1c9e3d-****-****-****-************ owner_hb_time: 2026-07-08 15:30:15 created_by: manual scheduler_id: 3d2f1a8b-****-****-****-************ strategy: single_statement on_conflict: NULL deleted_rows: 3200 error_message: NULL created_at: 2026-07-08 15:28:00 started_at: 2026-07-08 15:28:02 finished_at: NULL2 rows in set (0.00 sec)
八、查询已取消的任务
SELECT task_id, table_schema, table_name, partition_name, status, error_message, finished_atFROM SYS.TTL_TASKWHERE status = 'cancelled'ORDER BY finished_at DESCLIMIT 2\\G
tdsql> SELECT task_id, table_schema, table_name, partition_name, -> status, error_message, finished_at -> FROM SYS.TTL_TASK -> WHERE status = 'cancelled' -> ORDER BY finished_at DESC -> LIMIT 2\\G*************************** 1. row *************************** task_id: 1020 table_schema: mydb table_name: orders partition_name: p0 status: cancelled error_message: schema_version changed during execution, task cancelled finished_at: 2026-07-08 14:50:30*************************** 2. row *************************** task_id: 1018 table_schema: mydb table_name: event_log partition_name: status: cancelled error_message: ttl_enable is OFF, task cancelled finished_at: 2026-07-08 10:15:222 rows in set (0.00 sec)