TDSQL Boundless TTL_TASK

SYS.TTL_TASK 记录 TTL(Time To Live)过期数据清理任务的当前执行状态,是运维排查 TTL 任务的核心系统表。系统在 Leader 节点上周期性扫描已启用 TTL 的表,并向该表写入 waiting 状态的任务;各 SQLEngine 节点上的执行进程获取任务并执行过期数据清理。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

一、功能

终态任务(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)

赞 (0)
上一篇 4天前
下一篇 4天前