本节主要介绍合并的分类、状态及压缩算法。 合并操作(Major Compaction)是将动静态数据做归并,会比较费时。当转储产生的增量数据积累到一定程度时,通过 Major Freeze 实现大版本的合并。合并与转储的最大区别在于,合并是集群上所有的分区在一个统一的快照点和全局静态数据进行合并的行为,是一个全局的操作,最终形成一个全局快照。
合并分类
按照合并数据量,合并可以分为:
全量合并:将静态数据全部读出并和动态数据合并为最终的静态数据。合并时间长,耗费 IO 和 CPU。
增量合并:仅仅合并被修改过的宏块,没有改变的宏块进行复用。
增量合并极大地减少了合并的工作量,是 OceanBase 数据库目前默认的合并算法。
渐进合并:每次全量合并一部分,若干轮次后整体数据被重写一遍。
并行合并:将数据划分到不同线程中并行做合并。
轮转合并:在合并时将正在进行合并的副本上的流量切换到其他未合并的副本上,待该副本合并完成后再将流量切回。
您可以对集群的每个 Zone 进行轮转合并,保证未合并的 Zone 可以完全无任何性能影响地对外提供服务。
更多合并相关的详细介绍信息,请参见 合并。
合并相关的配置项及其说明请参见 修改合并配置。
合并状态
合并的状态可以通过视图 DBA_OB_ZONE_MAJOR_COMPACTION 中的 status 列来查看。
合并状态主要有以下几种:
IDLE:表示未进行合并。COMPACTING:表示正在进行合并。VERIFYING:表示正在校验 Checksum 中。
合并的压缩算法
OceanBase 数据库不会实时将小部分数据刷盘,而是通过合并的方式集中对数据进行刷盘,因此可以采用压缩的方式来写入磁盘,此时磁盘的空间利用率得到提升。在压缩算法和压缩功能的选择上,您可以根据实际情况选择高压缩率但是耗费更多 CPU 的方式,也可以选择普通的压缩方式。
您可以通过参数 default_compress_func 来配置压缩方式,默认值为 zstd_1.0。其他可指定的值还有 none、lz4_1.0、snappy_1.0、zlib_1.0 和 zstd_1.0。
说明
更高的压缩率将更节约磁盘空间,但是也意味着性能的牺牲。例如,通常 ZSTD 比 LZ4 节省更多的空间,但是 ZSTD 合并的时间更长,同时需要 IO 查询的 RT 也更大。
如果希望为单独的表选择特别的压缩算法,您可以在创建数据表时指定压缩算法。
租户创建表并指定压缩算法的语法请参见 CREATE TABLE(MySQL 模式) 和 CREATE TABLE(Oracle 模式)。
合并的触发方法
OceanBase 数据库支持自动触发合并、定时触发合并和手动触发合并。




