触发RocksDB中L2~L6层进行Compaction的条件是什么

L0层触发条件: SST文件个数达到level0-file-num-compaction-trigger
L1层触发条件: 总数据量达到max-bytes-for-level-base
那么L2及以上层呢?

L2层可以参考L1 层的触发条件,就是数据量会更大…

rocksdb有2中compact的策略,level 0是tired compaction,当sst文件数量达到一定值后向下压缩,由参数level0-file-num-compaction-trigger控制。level-1往下是 leveled compaction,由参数max-bytes-for-level-base 、max-bytes-for-level-multiplier 控制每层的最大大小,最大层数由num-levels控制,compact时会计算每层分数,分数就是 总容量和最大容量比值,当达到每层的最大容量大小后会选择分数最大的层开始往下compact.

https://docs.pingcap.com/zh/tidb/stable/tikv-configuration-file#max-bytes-for-level-multiplier

看这个参数,上一层的最大容量 乘以 max-bytes-for-level-multiplier ,默认是10倍。

这里的10倍 就是 max-bytes-for-level-multiplier`决定的

意思是在L2以下层级,触发条件是max-bytes-for-level-multiplier,即本层数据增长超过下层的10%时触发吗?

不是,是达到本层的最大容量时,会触发compaction,本层最大的容量的计算方式是, max-bytes-for-level-base * max-bytes-for-level-multiplier^(n - 1),比如,默认情况下, Level1 最大容量是 512M * 10^(1-1) = 512M,Level2 就是 5120M,以此类推

1 个赞

懂了,感谢

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。