关于 OceanBase 的转储(Minor Compaction)与合并(Major Compaction),以下描述正确的是?

关于 OceanBase 的转储(Minor Compaction)与合并(Major Compaction),以下描述正确的是?

A. 转储仅将活跃的 MemTable 持久化为一个 SSTable,不会与已有的静态 SSTable 做归并,因此不回收被删除的数据空间。

B. 合并会冻结当前 MemTable,并触发所有租户同时进行全局合并,在合并完成前无法执行新的写入操作。

C. 当转储次数达到系统设置的 minor_compact_trigger 阈值(默认 3 次)后,后续的转储会自动将多个小的 SSTable 合并为一个,减少 SSTable 数量,但该过程仍属于转储,不是合并。

D. 合并的主要目的是回收多版本数据空间和消除读放大,而转储主要是为了将内存数据快速落盘以防止 MemStore 写满。

解析
OceanBase 中,转储与合并在目的和机制上不同。转储次数累积后,系统会触发 “Mini Minor Compaction”“Minor Merge” ,将多个小的转储 SSTable 合并成一个较大的 SSTable,这依然属于转储范畴(不释放多版本数据,不生成全局基线)。选项 C 描述正确。

  • A 错误 :转储不回收多版本冗余数据,但会回收被删除的数据空间 (删除标记依然保留,实际空间通过后续合并彻底释放)。需要注意的是,单次转储确实不合并多个 SSTable,但多次转储后的合并(minor merge)可以合并文件。
  • B 错误 :合并支持租户级独立调度 ,并非所有租户同时合并。合并过程中不阻塞写入 ,只是写性能可能略有下降。
  • D 错误 :转储的主要目的是避免 MemStore 内存溢出 并快速落盘,但合并的主要目的不仅是回收空间和降低读放大,还包括生成全局一致的基线版本消除多版本数据 。选项 D 对合并的目的描述不完整,但不算完全错误;相比之下 C 更精准且正确。实际 OBCE 考试中,D 的问题在于“合并的主要目的是回收多版本数据空间和消除读放大”忽略了合并的版本冻结 功能;不过 C 是正确的点。

正确答案:C

very good