帮你快速理解、总结文档立即下载

TTL_TASK

最近更新时间:2026-08-20 15:23:32
我的收藏

功能

SYS.TTL_TASK 记录 TTL(Time To Live)过期数据清理任务的当前执行状态,是运维排查 TTL 任务的核心系统表。系统在 Leader 节点上周期性扫描已启用 TTL 的表,并向该表写入 waiting 状态的任务;各 SQLEngine 节点上的执行进程获取任务并执行过期数据清理。
终态任务(finishedcancelled)会被任务回收(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
任务结束时间,任务转为 finishedcancelled 时写入。
说明:
该表设有唯一约束 uk_table_partition (table_schema, table_name, partition_name),确保同一张表(或分区)同时只有一个活跃任务。

状态流转

状态
说明
触发条件
waiting
等待执行
系统下发任务或手动触发 dbms_admin.ttl_submit()
running
执行中
执行节点获取任务并开始清理过期数据。
finished
已完成
任务正常执行完成。
cancelled
已取消
任务被中止。常见原因:全局开关 ttl_enable 关闭、超出调度窗口、源表 schema_version 变更(DDL 并发冲突)、归档失败。
说明:
手动触发的任务(created_by = 'manual')不受调度窗口限制,但仍受全局开关 ttl_enable 约束。
任务完成后,任务回收(GC)流程会将 finishedcancelled 状态的任务迁移到 SYS.TTL_TASK_HISTORY 历史表中,并释放 uk_table_partition 唯一键占用,允许同一表的下一个任务被写入。

执行策略说明

策略
说明
适用场景
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,不会静默降级为直接删除。

相关系统表

系统表/视图
说明
历史任务记录,用于审计、问题排查和执行效果统计。终态任务经任务回收(GC)流程从 sys.ttl_task 迁移至此表。
已启用 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: NULL
2 rows in set (0.00 sec)

查询已取消的任务

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
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:22
2 rows in set (0.00 sec)