首批通过分布式安全可靠测评,为关键业务系统打造
如何修改 OceanBase 数据库的合并方式
更新时间:2026-06-15 09:16
本文主要介绍如何修改 OceanBase 数据库的合并方式。
您可以通过表级属性 progressive_merge_num 来控制合并行为,也可以通过 default_progressive_merge_num 配置项来设置新建一张表时默认的渐进合并次数。
当您未对新建表指定 progressive_merge_num 属性时,系统会将表级属性 progressive_merge_num 的值设置为 default_progressive_merge_num 的值。
progressive_merge_num 属性的取值含义如下:
progressive num = 0时,使用默认值 100。progressive num = 1时,表示强制执行全量合并,不执行增量或渐进合并。progressive num = X时,表示 X 轮合并重写完全部数据,每轮合并重写 1/X。
适用版本
OceanBase 数据库所有版本
全量合并
在全量合并过程中,会把当前的静态数据都读取出来,和内存中的动态数据合并后,再写到磁盘上去作为新的静态数据。
可以将表属性 progressive_merge_num 设置为 1,表示将合并方式修改为全量合并。
obclient> ALTER TABLE $table SET progressive_merge_num=1;
增量合并
增量合并是相对于全量合并而言的概念,大多数情况下,当需要进行合并时并不是所有的宏块都需要被修改,当一个宏块没有增量修改时,可以直接重用它,而不是重写它,这种方式称之为增量合并。相对于全量合并的把所有的宏块的重写一遍而言,增量合并只重写发生了修改的宏块。
将表属性 progressive_merge_num 修改为 0 时,表示将合并方式设置为增量合并。
obclient> ALTER TABLE $table SET progressive_merge_num=0;
渐进合并
渐进合并是全量合并的一种实现方式。在一次合并过程中完成对所有数据的重写,对存储空间和合并时间都会是一个比较大的考验。为了解决这个问题,OceanBase 数据库引入了渐进合并,即把数据重写分散到多次合并中去做。假设把渐进轮次设置为 60,那么一次合并就只会重写六十分之一的数据,在六十轮合并过后,数据就被整体重写了一遍。渐进合并减轻了 DBA 做 DDL 操作的负担,同时也使得 DDL 变得更加平滑。
将表属性 progressive_merge_num 设置为大于 1 的值时,表示将合并方式修改为渐进合并,并且每次合并 1/num 的数据。
obclient> ALTER TABLE $table SET progressive_merge_num=$num;