首批通过分布式安全可靠测评,为关键业务系统打造
动态分区概述
更新时间:2026-04-27 14:53:19
动态分区是 OceanBase 数据库提供的一种自动管理分区的功能,允许表根据预设规则自动创建和删除分区,从而简化运维并适应数据增长或过期的需求。
功能特性
根据
TIME_UNIT(如小时、天、月等)定期创建新分区,确保数据按时间范围自动扩展。- 分区边界基于时间单位(如
hour、day)划分,适用于按时间序列存储数据的场景(如日志、交易记录)。
- 分区边界基于时间单位(如
通过
PRECREATE_TIME预创建未来分区,避免因数据突增导致的分区不足问题。根据
EXPIRE_TIME定期清理过期分区,释放存储空间。支持自定义时区(
TIME_ZONE),确保跨时区数据的一致性。支持
bigint类型时间戳的精度配置(如BIGINT_PRECISION),适配不同时间精度需求。
预创建分区
在执行动态分区管理时,系统会间隔 TIME_UNIT 创建分区,直到最大分区边界超过 now() + precreate_time,创建的第一个分区边界为现存最大分区边界按 TIME_UNIT 向上取整。
示例如下:
创建表 tbl1:
CREATE TABLE tbl1 (col1 DATETIME)
DYNAMIC_PARTITION_POLICY(
ENABLE = true,
TIME_UNIT = 'hour',
PRECREATE_TIME = '3 hour',
EXPIRE_TIME = '1 day',
TIME_ZONE = '+8:00')
PARTITION BY RANGE COLUMNS (col1)(
PARTITION P0 VALUES LESS THAN ('2025-04-23 17:30:00')
);
若现存最大分区边界大于当前时间
2025-04-23 16:24:56,调度一次动态分区管理后,分区为:PARTITION P0 VALUES LESS THAN ('2025-04-23 17:30:00'), PARTITION P2025042317 VALUES LESS THAN ('2025-04-23 18:00:00'), PARTITION P2025042318 VALUES LESS THAN ('2025-04-23 19:00:00'), PARTITION P2025042319 VALUES LESS THAN ('2025-04-23 20:00:00')若现存最大分区边界小于当前时间,预创建分区会尝试补充历史分区。例如现存最大分区为
PARTITION P0 VALUES LESS THAN ('2025-04-23 15:30:00'),当前时间为2025-04-23 16:26:56,调度一次动态分区管理后,分区为:PARTITION P0 VALUES LESS THAN ('2025-04-23 15:30:00'), PARTITION P2025042315 VALUES LESS THAN ('2025-04-23 16:00:00'), PARTITION P2025042316 VALUES LESS THAN ('2025-04-23 17:00:00'), PARTITION P2025042317 VALUES LESS THAN ('2025-04-23 18:00:00'), PARTITION P2025042318 VALUES LESS THAN ('2025-04-23 19:00:00'), PARTITION P2025042319 VALUES LESS THAN ('2025-04-23 20:00:00')补充了历史分区
P2025042315。
预创建分区的名字
系统会根据分区边界值和 TIME_UNIT 确定自动生成的分区名,分区名前缀为 P。
| TIME_UNIT | 分区上界 | 分区名 |
|---|---|---|
| hour | 2024-03-04 05:00:00 | P2024030404 |
| day | 2024-03-05 00:00:00 | P20240304 |
| week | 2024-03-11 00:00:00 | P2024_10(ISO 8601 第 10 周) |
| month | 2024-04-01 00:00:00 | P202403 |
| year | 2025-01-01 00:00:00 | P2024 |
删除过期分区
在执行动态分区管理时,系统会根据 EXPIRE_TIME 删除所有 分区上界 < now() - expire_time 的过期分区。
示例如下:
创建表
tbl2。CREATE TABLE tbl2 (col1 DATETIME) DYNAMIC_PARTITION_POLICY( ENABLE = true, TIME_UNIT = 'hour', PRECREATE_TIME = '3 hour', EXPIRE_TIME = '6 hour', TIME_ZONE = '+8:00') PARTITION BY RANGE COLUMNS (col1)( PARTITION P0 VALUES LESS THAN ('2025-04-21 08:30:00') );当前时间为
2025-04-21 17:56:06,调度一次动态分区管理后,分区为:PARTITION P0 VALUES LESS THAN ('2025-04-21 08:30:00'), PARTITION P2025042108 VALUES LESS THAN ('2025-04-21 09:00:00'), PARTITION P2025042109 VALUES LESS THAN ('2025-04-21 10:00:00'), PARTITION P2025042110 VALUES LESS THAN ('2025-04-21 11:00:00'), PARTITION P2025042111 VALUES LESS THAN ('2025-04-21 12:00:00'), PARTITION P2025042112 VALUES LESS THAN ('2025-04-21 13:00:00'), PARTITION P2025042113 VALUES LESS THAN ('2025-04-21 14:00:00'), PARTITION P2025042114 VALUES LESS THAN ('2025-04-21 15:00:00'), PARTITION P2025042115 VALUES LESS THAN ('2025-04-21 16:00:00'), PARTITION P2025042116 VALUES LESS THAN ('2025-04-21 17:00:00'), PARTITION P2025042117 VALUES LESS THAN ('2025-04-21 18:00:00'), PARTITION P2025042118 VALUES LESS THAN ('2025-04-21 19:00:00'), PARTITION P2025042119 VALUES LESS THAN ('2025-04-21 20:00:00'), PARTITION P2025042120 VALUES LESS THAN ('2025-04-21 21:00:00')时间为
2025-04-21 17:56:16,再次调度一次动态分区管理后,分区为:PARTITION P2025042111 VALUES LESS THAN ('2025-04-21 12:00:00'), PARTITION P2025042112 VALUES LESS THAN ('2025-04-21 13:00:00'), PARTITION P2025042113 VALUES LESS THAN ('2025-04-21 14:00:00'), PARTITION P2025042114 VALUES LESS THAN ('2025-04-21 15:00:00'), PARTITION P2025042115 VALUES LESS THAN ('2025-04-21 16:00:00'), PARTITION P2025042116 VALUES LESS THAN ('2025-04-21 17:00:00'), PARTITION P2025042117 VALUES LESS THAN ('2025-04-21 18:00:00'), PARTITION P2025042118 VALUES LESS THAN ('2025-04-21 19:00:00'), PARTITION P2025042119 VALUES LESS THAN ('2025-04-21 20:00:00'), PARTITION P2025042120 VALUES LESS THAN ('2025-04-21 21:00:00')可以看到过期分区
P0、P2025042108、P2025042109和P2025042110被删除。
注意事项
对于从 V4.3.5 BP2 之前版本升级上来的租户,执行
DROP分区操作将导致全局索引失效。对于存在全局索引的表,谨慎使用删除过期分区功能。说明
对于 V4.3.5 版本,OceanBase 数据库从 V4.3.5 BP2 版本开始引入租户级隐藏配置项
_ob_enable_truncate_partition_preserve_global_index,用于控制是否允许在TRUNCATE/DROP主表分区(以下简称分区 DDL)时,全局索引不失效。- 对于升级上来的租户,该隐藏配置项默认值为
False,表示TRUNCATE/DROP主表分区,全局索引失效。 - 对于新建租户默认值为
True,表示TRUNCATE/DROP主表分区,全局索引不失效。
- 对于升级上来的租户,该隐藏配置项默认值为
动态分区管理在调度失败时不会自动重试。为避免因连续调度失败导致新分区无法及时创建,进而造成数据写入失败,建议将
PRECREATE_TIME设置为较大数值。集群升级期间禁止 DDL 操作,动态分区管理将暂停调度。建议根据预估升级时长,提前预建分区,覆盖升级窗口。
修改分区键列类型、修改分区规则后,若新表 Schema 不满足动态分区管理限制,后续动态分区管理在这张表上的调度会失败。
一次调度最多创建 2048 个分区。如果需要补充的历史分区过多,调度多次才能满足预创建时间。
动态分区管理功能需要在后台发送 DDL 进行分区的创建和删除。为避免持续影响其他 DDL 操作,动态分区表数不宜过多。