增量合并是相对于全量合并而言的概念,同样是 OceanBase的一种合并算法。大多数情况下,当需要进行合并时并不是所有的宏块都需要被修改,当一个宏块没有增量修改时,我们可以直接重用它,而不是重写它,我们将这种方式称之为增量合并。相对于全量合并的把所有的宏块的重写一边而言,增量合并只重写发生了修改的宏块。增量合并极大地减少了合并的工作量,是 OceanBase 目前默认的合并算法。

    更进一步地,OceanBase 会在宏块内部将数据拆分为更小的微块(微块大小允许自由配置,一般是16KB大小,长度允许变长),很多情况下也并不是所有的微块都会被修改。当发现宏块有行被修改过时,在处理每一个微块时,会先判断这个微块是否有行被修改过,如果没有,只需要把这个微块的数据直接拷贝到新的宏块上,这样没被修改过的微块就省去了解析行、选择编码规则、对行进行编码以及计算列 checksum 等操作。微块级增量合并进一步减少了合并的时间。