写点什么

一文了解 TiDB 的 TTL 功能

  • 2024-06-14
    北京
  • 本文字数:1913 字

    阅读完需:约 6 分钟

作者: 数据源的 TiDB 学习之路原文来源:https://tidb.net/blog/5498cfea



在数据库中,TTL (Time To Live,生存时间) 是一种管理过期数据的功能。通过设置数据的生命周期,可以自动删除过期的数据,从而保证数据库的性能和可用性。TTL 功能通常用于处理时间敏感型数据的应用程序,例如消息队列、会话数据或事件日志。此外,它们还可以用于执行数据保留策略或遵守数据隐私法规,这些法规要求数据在一段时间后必须被删除。TiDB 在 6.5 版本中首次引入 行级 TTL 功能作为实验特性,并于 7.1 版本中正式 GA。本文概括的介绍 TiDB 中行级 TTL 功能。

TTL 适用哪些场景

TTL 设计的目标是不影响在线业务的前提下,帮助用户周期性的及时清理不必要的数据。TTL 比较适用的场景包括:


  1. 定期删除验证码、网址记录

  2. 定期删除不需要的历史订单

  3. 自动删除计算的中间结果

TTL 主要价值

使用 TTL 可以实现以下功能:


  1. 每行数据将自动被删除。

  2. 即时清除无效数据,节省存储空间,并提高查询性能。

  3. 通过自动删除旧记录,TTL 可以减少数据库所需的手动维护和管理工作量,使得 TiDB 更加易于使用。

如何使用 TTL 功能

TTL 功能作为表级别的一个属性来启用。如果希望表创建时默认有 TTL 能力,可以在建表语句 (CREATE TABLE) 显式指定 TTL 属性;如果想对已存在的表增加 TTL 能力,可以使用修改表语句 (ALTER TABLE) 添加 TTL 属性。


TTL 与时间密切相关,因此设置 TTL 的表中一般都会有一个时间相关的字段,TTL 则设置为与这个时间的一个间隔 (INTERVAL) 时间,比如时间字段是 create_dt,TTL 设置为 create_dt + INTERVAL 3 month,这表示创建时间超过 3 个月的数据被标记为过期数据。


下面为一个创建带有 TTL 属性表的示例:



下面为一个通过 ALTER TABLE TTL 为表增加 TTL 属性的示例:



从以上两个示例的表结构输出中,我们看到除了 TTL 属性外,还额外显示了两个属性 TTL_ENABLE 和 TTL_JOB_INTERVAL。TTL_ENABLE 表示是否启用 TTL 任务,默认值为 ON,如果把 TTL_ENABLE 设置为 OFF,即使表上有 TTL 选项,也不会自动清理过期数据。TTL_JOB_INTERVAL 表示清理过期数据任务的调度周期,默认为 1h,如果想调整过期数据的清理周期,可以使用 ALTER TABLE 来修改此属性。

TTL 工作原理

TTL 清理频率:对于设置 TTL 属性的表,TiDB 内部会定期调度后台任务来清理过期的数据,默认的调度周期为 1h,可通过修改表属性 TTL_JOB_INTERVAL 调整,如 ALTER TABLE orders TTL_JOB_INTERVAL = ‘24h’。


TTL 并发设置:对于每个有 TTL 属性的表,TiDB 基于表的 Region 数量将表拆分为最多 64 个子任务,这些子任务被分发到不同的 TiDB 节点执行。默认情况下整个集群中的子任务数最大值与 TiKV 节点数量相同,这可以通过变量 tidb_ddl_running_tasks 进行修改,最大为 256。


禁止 TTL 任务:禁止 TTL 任务可以基于表级别或全局级别


  1. 单表设置:ALTER TABLE t1 TTL_ENABLE = ‘OFF’;

  2. 全局设置:SET @@global.tidb_ttl_job_enable = OFF;


删除 TTL 属性:ALTER TABLE t1 REMOVE TTL;


TTL 清理时段:默认情况下,过期数据的清理不受时间段限制,但如果为了避免对业务造成影响也可以设置 TTL 任务 的时间段,比如设置为凌晨 01:00~05:00,这可以通过设置系统变更来实现


  1. 开始时间:SET @@global.tidb_ttl_job_schedule_window_start_time = ‘01:00 +0000’;

  2. 结束时间:SET @@global.tidb_ttl_job_schedule_window_end_time = ‘05:00 +0000’;

如何监控 TTL 状态 (可观测性)

TTL 任务是可以被监控的,这有两种方式,一种是通过 Grafana 图形化界面查看,另一种是直接查看相应的元数据表。

Grafana 监控

通过 Grafana-> TiDB -> TTL 可以查看 TTL 相关的所有面板。




以下列表描述面板中每个 TTL 相关图表的含义,它们可以帮助分析诊断 TTL 的运行情况,比如通过对比 TTL Insert Rows Per Hour 和 TTL Delete Rows Per Hour 就可以了解 TTL 删除数据是否足够快速以保证表的数据量稳定。


  • TTL QPS By Type:TTL 任务产生的不同类型语句的 QPS 信息。

  • TTL Insert Rows Per Second: 每秒钟向 TTL 表插入的数据行数。

  • TTL Processed Rows Per Second:TTL 任务每秒处理的过期数据的行数。

  • TTL Insert Rows Per Hour: 每小时总共向 TTL 表插入的行数。

  • TTL Delete Rows Per Hour: 每小时总共删除的过期行数。

  • TTL Scan/Delete Query Duration:TTL 的扫描 / 删除语句的执行时间。

  • TTL Scan/Delete Worker Time By Phase:TTL 内部工作线程的不同阶段所占用的时间。

  • TTL Job Count By Status:当前正在执行的 TTL 任务的数量。

  • TTL Task Count By Status:当前正在执行的 TTL 子任务的数量。

TTL 元数据表

TTL 相应的元数据表及描述如下表格所示:


参考链接

https://docs.pingcap.com/zh/tidb/stable/time-to-live


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
一文了解 TiDB 的 TTL 功能_新版本/特性解读_TiDB 社区干货传送门_InfoQ写作社区