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
这个页面对您有帮助吗?
有用
有用
无用
无用