OceanBase 数据库的存储引擎采用 LSM-Tree 架构,数据大体上被分为 MemTable 和 SSTable 两部分,当 MemTable 的内存使用达到一定阈值时,就需要将 MemTable 中的数据存储到磁盘上以释放内存空间,这个过程称为转储。在转储之前首先需要保证被转储的 MemTable 不再进行新的数据写入,这个过程称为冻结(Minor Freeze),冻结会阻止当前活跃的 MemTable 再有新的写入,并同时生成新的活跃 MemTable。

    在对冻结 MemTable 进行转储时,会扫描冻结 MemTable 中的数据行,并将这些数据行存储到 SSTable 中,当一条数据被多个不同事务反复修改时,可能会有多个不同版本的数据行存储到转储 SSTable 中。

    转储发生在 MemTable 的大小满足一定条件时,任何分区副本都可以独立决定冻结当前 MemTable,并转储到磁盘上。转储出的 SSTable 只与相同大版本的增量数据做数据归并,不与全局静态数据合并。这样设计是基于增量数据远小于全局数据的考虑,使得转储会比较快。

    转储支持自动触发和手动触发两种方式。