关于转储合并的诸多问题

官方转储合并的文章:OceanBase 社区

https://open.oceanbase.com/docs/observer-cn/V3.1.2/10000000000014457

https://open.oceanbase.com/docs/observer-cn/V3.1.2/10000000000016253

1、 合并的概念问题(可能我理解有问题): memtable到L0叫转储(mini sst)、 L0到L1叫合并(minor sst)、L1到L2叫合并(major SST)。手动转储 ALTER SYSTEM MINOR FREEZE 是否只是memtable到L0,这里用的minor关键字,看起来好像又和L1层有关系? 而对于合并又专门的合并管理章节,而这个章节的内容貌似又指的是到L2的基线合并。

2、“当 L0 层的 Mini SSTable 总大小和 L1 层的 Minor SSTable 的大小比率达到指定阈值后,才开始调度 L1 合并,否则仍在 L0 层内部合并。” 官方描述如上,这个指定阈值是什么参数,暂时没有找到。另外这里描述使用了L0层内部合并。

3、合并管理概述中的出来全量外的,增量、渐进、并行、轮转合并是否只是L1到L2层的基线合并?

4、 官方描述“L0 层每个 Level 内的多个 SSTable 根据 base_version 有序” 转储合并涉及base_version、merge_version,OB对这些version的管理、分配是什么样的,暂时没找到文档?

5、每日合并时的全局一致性快照时间点怎么判断或生成?

  1. ALTER SYSTEM MINOR FREEZE只会触发内存的转储,memtable => mini sst,OB称为mini dump。
  2. L0到L1层合并受参数minor_compact_trigger控制触发,触发之后可能执行L0内部合并,即若干个mini sst合成一个,n * mini sst => mini sst,OB称为mini minor,也可能执行L0到L1层的合并,n * mini sst + old minor sst => new minor sst,OB称为minor compaction。具体触发哪个,受隐藏参数_minor_compaction_amplification_factor控制。
  3. OceanBase语境中的合并是指L2层的合并,n * mini sst + minor sst + old major sst => new major sst,也称为major compaction或每日合并,major compaction是对数据做了一次全局一致性快照。
  4. 这些version的介绍目前还没有一个详细的文档,后面会写。
  5. 全局一致性快照的位点是RS生成的,通过内部表__all_virtual_freeze_info同步。
2 个赞

感谢,1、ALTER SYSTEM MINOR FREEZE 这个成的是mini ssttable命令是不是可以改成 mini freeze,看Minor总感觉是到L1层的,可能有点强迫症。

2、 “minor_compact_trigger 用于控制分层转储触发向下一层下压的阈值。当该层的 Mini SSTable 总数达到设定的阈值时,所有 SSTable 都会被下压到下一层,组成新的 Minor SSTable。”   这个参数值是2,假如性能足够的情况下,L0层会永远是2个吧

另外rs生产全局快照是依据什么生成的?

  1. 命令中使用MINOR这个关键字是历史原因,很老版本时,OB是没有L0这一层的,只有L1和L2。
  2. 其实不一定,因为性能足够一般会优先前台任务,例如用户写入,除非为了保证转储速度限制memtable的写入,这种情况下的转储性能足够,会保证L0层的sst永远小于等于2。
  3. RS的全局快照依据什么生成?触发合并就会生成吧,触发合并有多种方式,例如达到major_freeze_trigger,定时发起,DBA手动触发等。