关于 OceanBase 的转储(Minor Compaction)层级与读放大之间的关系,以下说法正确的是?

关于 OceanBase 的转储(Minor Compaction)层级与读放大之间的关系,以下说法正确的是?

A. 转储层级越深(如 L2、L3),每个层级的数据量越大,查询时需要扫描的 SSTable 数量越多,读放大越严重。

B. 系统通过 minor_compact_trigger 参数控制转储触发频率,该值设置越大,转储越频繁,读放大越小。

C. 自适应转储将小 SSTable 合并为较大的 SSTable,减少 SSTable 总数,从而有效降低读放大。

D. 读放大主要受转储层级影响,与合并(Major Compaction)无关。合并仅用于回收多版本数据,不缓解读放大。

1 个赞

解析
OceanBase 的自适应转储策略会在转储次数达到 minor_compact_trigger (默认 3)后,自动将多个小的转储 SSTable 合并为一个较大的 SSTable(称为 minor merge)。这减少了 SSTable 的数量,从而降低了查询时需要扫描的文件数量,减少了读放大。

  • A 错误 :转储层级并非 L0、L1、L2 这样的层级结构(类似 LevelDB 的设计),OceanBase 的转储不采用多层级结构。所有转储产生的 SSTable 在逻辑上是平级的,只是通过合并来减少数量。A 描述的是 LevelDB/RocksDB 的层级模型,不是 OceanBase 的。
  • B 错误minor_compact_trigger 设置越小,越容易触发合并(转储间的合并),SSTable 数量减少,读放大越小。设置越大,累积的小 SSTable 越多,读放大越大。B 中“设置越大,转储越频繁”本身有误(它控制的是合并触发阈值,而非转储频率)。
  • C 正确 :自适应转储通过合并小 SSTable 减少文件数,降低读放大。
  • D 错误 :合并(Major Compaction)同样能降低读放大,因为它将所有 SSTable 和 MemTable 归并成一个新的基线 SSTable,消除了多层文件堆积,是缓解读放大的最终手段。
2 个赞

正确答案:C

3 个赞