首批通过分布式安全可靠测评,为关键业务系统打造
什么是合并 major freeze
更新时间:2026-06-15 09:16
本文主要介绍合并的相关概念。
合并是将全局指定时间点之前的所有数据都合成一个 major sstable 的过程,耗时较长。
触发方式
- 手动触发:
alter system major freeze;。 - 转储次数超过指定阈值后自动触发合并:
major_compact_trigger。 - 每次定时触发:通过配置项
major_freeze_duty_time指定。
如何判断合并是否结束
通过 SQL 查询全局合并状态信息。
OceanBase 数据库 V2.x、V3.x 版本。
select * from __all_zone;当 last_merged_version == global_broadcast_version 的时候表示合并结束。
OceanBase 数据库 V4.x 版本。
系统租户
SELECT * FROM CDB_OB_MAJOR_COMPACTION;当 STATUS 为 IDLE,同时 GLOBAL_BROADCAST_SCN 和 LAST_VERSION 值相等,则说明合并结束。
普通租户
SELECT * FROM DBA_OB_MAJOR_COMPACTION;当 STATUS 为 IDLE,同时 GLOBAL_BROADCAST_SCN 和 LAST_VERSION 值相等,则说明合并结束。
如何找到没有合并到指定 major 版本的 partition
OceanBase 数据库 V2.x、V3.x 版本。
select * from __all_virtual_meta_table where data_version != xxx limit 10;其中
data_version指定为当前正在合并的版本。OceanBase 数据库 V4.0 版本。
select * from __all_tablet_meta_table where tenant_id = xxx and compaction_scn < xxx;查询所有 compaction_scn 未达到指定版本号的 tablet。
注意
内部表
__all_tablet_meta_table的compaction_scn字段是从 OceanBase 数据库 V4.1.0 版本开始,在 OceanBase 数据库 V4.0.0 版本,请使用snapshot_version。
合并的实现[在 V4.x 版本之前]
启动合并 RS 发起合并之后,通过心跳发送到 observer,observer 在收到心跳后查询 __all_zone 表判断是否能做合并,然后开始 observer 的合并流程。
合并中 observer 遍历所有的 partition,依次发起合并任务并交由后台线程池执行。
合并结束 observer 周期地遍历所有的 partition 来判断是否合并完成,对于完成的 partition 更新其 meta 信息和 checksum 信息到内部表,RS 周期地检查内部表,当所有的 partition 的 meta 都推到了指定版本,判断为合并结束。
适用版本
OceanBase 数据库所有版本。