TIDB使用 TTL (Time to Live) 定期删除过期数据原创
# 简介
TTL(Time to Live)是TiDB中的一种数据生命周期管理机制,通过为表设置TTL属性,自动定期清理过期的数据。这一功能特别适用于需要定期删除历史数据的场景,如验证码、短网址、历史订单等,从而减少存储占用并提升系统性能。
# 主要功能与使用场景
TTL可以为每张表设置过期数据的生存周期,过期数据会在后台任务中定期清理。常见的使用场景包括:
- 删除过期的验证码或短网址记录。
- 定期清理不再需要的历史订单或中间计算结果。
TTL设计的一个重要目标是确保在不影响在线读写的情况下,自动清理不再需要的数据。
# TTL的使用方法
创建带有TTL属性的表:通过
CREATE TABLE
语句可以设置TTL,如:CREATE TABLE t1 ( id int PRIMARY KEY, created_at TIMESTAMP ) TTL = `created_at` + INTERVAL 3 MONTH;
1
2
3
4上述语句创建了一张表,数据存活时间为3个月,之后将被自动删除。
修改TTL属性:可以通过
ALTER TABLE
语句修改TTL设置或禁用TTL:ALTER TABLE t1 TTL = `created_at` + INTERVAL 1 MONTH; ALTER TABLE t1 TTL_ENABLE = 'OFF';
1
2TTL任务调度:TTL任务以表为单位,并发执行。通过设置
TTL_JOB_INTERVAL
可以控制任务执行的频率,如:ALTER TABLE orders TTL_JOB_INTERVAL = '24h';
1默认任务每小时执行一次。
# 使用限制与兼容性
- TTL不支持临时表,且不允许带有外键的主表使用TTL属性。
- TTL任务并不保证所有过期数据会立刻删除,清理操作依赖于后台任务的调度。
- 通过特定系统表(如
mysql.tidb_ttl_table_status
和mysql.tidb_ttl_job_history
)可以监控和管理TTL任务。
上次更新: 10/2/2024
- 02
- Flink 集群部署指南 原创09-20
- 03
- MongoDB 集群Config Server 复制集的工作原理09-14