You need to enable JavaScript to run this app.
文档中心
云数据库 veDB MySQL 版

云数据库 veDB MySQL 版

复制全文
下载 pdf
冷热分离
自动归档冷数据
复制全文
下载 pdf
自动归档冷数据
本文介绍如何自动归档分区表的冷数据。
前提条件
  • 已连接 veDB MySQL 实例,操作详情请参见连接实例
方式一:配置定时执行的 DDL
可通过配置定时任务的方式,执行 DDL 进行转换,实现自动归档冷数据。
DELIMITER ||
drop event if exists bytendb_ps_extend_part_event ||
create event bytendb_ps_extend_part_event
on schedule EVERY 1 DAY STARTS date_add(date(ADDDATE(curdate(),1)),interval 1 hour)
do
BEGIN
alter table table_name comment="storage_policy=cold";
END ||
DELIMITER ;
方式二:使用内置的存储过程
veDB MySQL 内置了一个存储过程,可以直接调用进行分区的自动扩展和转换。
使用限制
仅分区表支持通过存储过程自动归档冷数据,且分区表必须满足以下要求:
  • 分区表不能包含二级分区。
  • 分区列为时间类型字段。
  • 分区的基本粒度为日月年。
  • 分区值满足以下要求。
  • part_old
    part_[yyyy][mm][dd] -- 如果按照具体的分区类型,存在不同的年、月、日的数据。
    part_[yyyy][mm][dd]
    part_[yyyy][mm][dd]
    part_future -- MAXVALUE。最后一个分区的值,必须是 maxvalue,这样能保证数据插入不会出错,起到兜底作用。
使用方式
  1. 实现分区自动扩展。
  • 语法
  • call sys.bytendb_ps_extend_part('database_name', 'table_name', partition_type, gaps, partition_number);
  • 参数说明:
  • 参数名
    类型
    参数说明
    database_name
    varchar
    数据库名称。
    table_name
    varchar
    表名称。
    partition_type
    int
    分区类型,取值:
    • 0,按天分区。
    • 1, 按月分区。
    • 2,按年分区。
    gaps
    int
    多少个单元为一组,根据分区类型取值,比如 7 天,1 个月,2 个月,1 年等。
    partition_number
    int
    需要扩展出的分区数量。
  • 示例
  • -- 按照天为粒度,以 1 天作为一个分区,扩展一个分区
    call sys.bytendb_ps_extend_part('database_name', 'table_name', 0, 1, 1);
    -- 按照年为粒度,以 2 年作为一个分区,扩展一个分区
    call sys.bytendb_ps_extend_part('database_name', 'table_name', 2, 2, 1);
  1. 将分区自动转换为冷分区。
  • 语法
  • call sys.bytendb_ps_tier_part("database_name", "table_name", reserve_partition_number,tier_partition_number);
  • 参数说明:
  • 参数名
    类型
    参数说明
    database_name
    varchar
    数据库名称。
    table_name
    varchar
    表名称。
    reserve_partition_number
    int
    需要保留的分区数量。
    tier_partition_number
    int
    需要转换的分区数量。
  • 示例
  • -- 保留最后 3 个有效分区,把下一个分区转冷
    call sys.bytendb_ps_tier_part("database_name", "table_name", 3,1);
使用示例
创建一个定时任务,实现分区的自动扩展和分区转换。
-- 对于非分片表,直接调用即可。
-- 对于分片表,需要包一层拉取所有分片的任务。
-- 每天凌晨一点,创建后续分区。
DELIMITER ||
drop event if exists bytendb_ps_extend_part_event ||
create event bytendb_ps_extend_part_event
on schedule EVERY 1 DAY STARTS date_add(date(ADDDATE(curdate(),1)),interval 1 hour)
do
BEGIN
-- 每天凌晨 1 点扩展一个新分区
call sys.bytendb_ps_extend_part("database_name", "table_name", 1, 1, 1);
-- 每天凌晨 1 点 ,将昨天的老分区转为冷分区
call sys.bytendb_ps_tier_part("database_name", "table_name", 1, 1);
END ||
DELIMITER ;
最近更新时间:2025.08.05 16:23:11
这个页面对您有帮助吗?
有用
有用
无用
无用