首批通过分布式安全可靠测评,为关键业务系统打造
转储和合并
更新时间:2026-06-07 15:48:19
转储包含两个过程:Mini Compaction 和 Minor Compaction。当 MemTable 的大小超过一定的阈值时,需要将 MemTable 中的数据转存到 Mini SSTable 中以释放内存,该过程称为 Mini Compaction。随着用户数据的写入,Mini SSTable 的数量越来越多,当 Mini SSTable 的数量超过一定的阈值时,后台会自动触发 Minor Compaction。转储(Mini Compaction)会生成新的 Mini SSTable。当转储(Mini Compaction)的次数超过一定阈值时,或者在每天的业务低峰期,系统会将基线 SSTable(Major SSTable)与之后转储的增量 SSTable(Mini/Minor SSTable)合并为一个新的 Major SSTable,该过程称为合并。
租户 MemTable 可使用的内存占总可用内存的比例为 memstore_limit_percentage,包括 Active MemTable 和 Frozen MemTable 两部分。当一个租户 MemTable 内存的使用量达到 memstore_limit_percentage * freeze_trigger_percentage 时,就会自动触发冻结(转储的前置动作),生成新的 Active MemTable,原来的 Active MemTable 成为 Frozen MemTable。然后再自动调度转储,转储完成后释放 Frozen MemTable 部分的内存。
说明
memstore_limit_percentage用于设置租户使用 MemStore 的内存占其总可用内存的百分比,默认值是 0,取值范围是[0, 100)。有关该配置项的详细信息,参见 memstore_limit_percentage。freeze_trigger_percentage用于设置触发全局冻结的租户使用内存阈值,默认值是 20,取值范围是 (0, 100)。有关该配置项的详细信息,参见 freeze_trigger_percentage。
可以通过以下手段加快触发转储:
调低
freeze_trigger_percentage手动执行
alter system minor freeze触发
当一个租户的冻结次数达到 major_compact_trigger 时自动触发合并。OceanBase 数据库 V4.x 版本中,其默认值为 0,表示关闭该方式的合并自动触发。
说明
major_compact_trigger 用于设置多少次冻结触发一次合并。取值范围为 [0, 65535]。有关该配置项的详细信息,参见 major_compact_trigger。
可以通过以下手段加快触发合并:
调低
major_compact_trigger手动执行
alter system major freeze触发
合并时数据不一致
数据不一致有三种情况:
行数不一致:主表与索引表的行数不一致。
Column Checksum 不一致:Major SSTable 中有 column 的 checksum 值不一致。
Data Checksum 不一致:Major SSTable 中所有行的 checksum 不一致。