PolarDB-X数据库和表操作实践:TTL自动清理历史数据

某些业务场景下,业务数据增长的很快,并且业务数据的热度随着时间推移会有明显的降低。此时如果数据 一直存储在PolarDB-X中,既会占用存储空间,也会降低正常业务查询的效率,此种场景很多业务会选择将历史数据归档后在PolarDB-X中删除。

如何能够快速删除历史数据而不影响到现有业务呢?本文将介绍PolarDB-X提供的TTL功能。PolarDB-X在 AUTO模式下提供了TTL的功能,可以快速的删除历史数据。


一、TTL(Time to Live,生存周期)简介

TTL(Time to Live,生存周期)功能,支持在创建表的DDL语句中指定local_partition_definition语法,创建一个TTL表。TTL表会将每个物理表按照时间进行分区,并通过定时任务进行管理,能够让冷数据在PolarDB-X中按照计划失效,减少对存储空间的占用。


TTL 功能使用限制:

  • 仅PolarDB-X的5.4.13及以上版本支持该功能;
  • TTL功能仅支持在分区表(mode='auto')中使用。


二、创建TTL表

若在建表时指定local_partition_definition语法,则将创建一张TTL表,TTL表会将每个物理表按照时间进行分区。

如果需要将t_order的物理表按照gmt_modified列进行时间分区,每个分区间隔一个月,每个分区12个月后过期,提前创建3个分区,创建语法如下:

CREATE TABLE t_order (
 id bigint NOT NULL AUTO_INCREMENT,
 gmt_modified DATETIME NOT NULL,
 PRIMARY KEY (id, gmt_modified)
)
PARTITION BY HASH(id)
PARTITIONS 16
LOCAL PARTITION BY RANGE (gmt_modified)
INTERVAL 1 MONTH
EXPIRE AFTER 12
PRE ALLOCATE 3;


参数说明:

TTL表支持的时间分区列类型为:date、datetime;

所有的唯一键(包括主键)必须包含TTL表的local partition by range时间分区列示例中是 gmt_modified 列。

TTL表最多支持32个最大物理时间分区。


-- 以下为TTL的相关语法

LOCAL PARTITION BY RANGE (gmt_modified)

INTERVAL 1 MONTH -- 每个⽉⼀个分区

EXPIRE AFTER 12 -- 数据在12个⽉后过期

PRE ALLOCATE 3; -- 提前3个⽉创建分区


查看该逻辑表的节点拓扑,如图所示,创建16个分区表:



三、查看TTL表的分区元数据

TTL表创建后,可以通过information_schema.local_partitions视图查看物理表上的分区信息。每个物理时间分区(Local Partition)会存储小于PARTITION_DESCRIPTION的数据。

每个物理时间分区(Local Partition)的失效时间会通过PARTITION_COMMENT显示。

select * from information_schema.local_partitions where table_name = 't_order' and table_schema='test'\G


校验所有物理表的物理时间分区(Local Partition)的完整性:

check table t_order with local partition;


四、变更TTL表

前面在创建 t_order 表时没有指定 STARTWITH 参数,导致按月分区时不是从 2022-08-01 开始的。下面变更TTL表,创建新的物理时间分区:

ALTER TABLE t_order
ALLOCATE LOCAL PARTITION
LOCAL PARTITION BY RANGE (gmt_modified)
 STARTWITH '2022-08-01'
 INTERVAL 1 MONTH;

执行完成之后,查看TTL表的分区元数据:

select * from information_schema.local_partitions where table_name = 't_order' and table_schema='test'\G



TTL表转换成普通表:

ALTER TABLE t_order REMOVE LOCAL PARTITIONING;



普通表转换成TTL表:

ALTER TABLE t_order
 LOCAL PARTITION BY RANGE (gmt_modified)
 STARTWITH '2022-08-01'
 INTERVAL 1 MONTH
 EXPIRE AFTER 12
 PRE ALLOCATE 6;



请注意:TTL 表和普通表相互转换时,需要进行数据搬迁,因此需要在业务低峰期进行操作。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章