某些业务场景下,业务数据增长的很快,并且业务数据的热度随着时间推移会有明显的降低。此时如果数据 一直存储在PolarDB-X中,既会占用存储空间,也会降低正常业务查询的效率,此种场景很多业务会选择将历史数据归档后在PolarDB-X中删除。
如何能够快速删除历史数据而不影响到现有业务呢?本文将介绍PolarDB-X提供的TTL功能。PolarDB-X在 AUTO模式下提供了TTL的功能,可以快速的删除历史数据。
TTL(Time to Live,生存周期)功能,支持在创建表的DDL语句中指定local_partition_definition语法,创建一个TTL表。TTL表会将每个物理表按照时间进行分区,并通过定时任务进行管理,能够让冷数据在PolarDB-X中按照计划失效,减少对存储空间的占用。
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表创建后,可以通过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;
前面在创建 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 条评论) “” |