@论坛小助手 详细解答一下合并参数及流程,谢谢。
3 个赞
根据文档库中的信息,以下是关于合并基线数据是否异步以及相关参数和流程的详细解答:
合并基线数据是否异步
根据 OceanBase 数据库的存储架构,合并(Merge)是将静态数据(SSTable)与动态数据(MemTable)进行归并的过程。这一过程通常是在后台执行的,并且不会阻塞前台的读写操作,因此可以认为合并基线数据的操作是异步的。
合并参数及流程
1. 合并分类
OceanBase 数据库支持多种类型的合并,具体包括:
- 全量合并:将静态数据全部读出并与动态数据合并为最终的静态数据。此过程耗时较长,占用较多的 IO 和 CPU 资源。
- 增量合并:仅合并被修改过的宏块,未改变的宏块直接复用。这是 OceanBase 数据库目前默认的合并算法,能够显著减少合并的工作量。
- 渐进合并:每次只对部分数据进行全量合并,经过若干轮次后完成整体数据的重写。
- 并行合并:将数据划分到不同线程中并行执行合并任务,以提高效率。
参考文档:合并管理概述 → 合并分类
2. 触发方式
OceanBase 数据库支持以下几种合并触发方式:
- 自动触发:系统根据预设规则自动触发合并。
- 定时触发:在每天的业务低峰期触发合并。
- 自适应合并:从 V4.1.0 版本开始支持,系统会根据用户的查询、写入等信息实时采集统计,自适应地调度合并任务。
-
手动触发:通过
MAJOR FREEZE
命令手动触发合并。
参考文档:合并管理概述 → 合并的触发方法
3. 关键参数
以下是与合并相关的几个重要参数:
-
default_progressive_merge_num
- 参数类型:整型
- 默认值:0
- 取值范围:[0, +∞)
- 描述:用于设置新建表时默认的渐进合并次数。当未指定表级属性
progressive_merge_num
时,系统会使用此参数的值作为默认值。-
progressive_merge_num = 0
:表示使用默认值 100。 -
progressive_merge_num = 1
:表示强制执行全量合并,不执行渐进合并。 -
progressive_merge_num = X
:表示分 X 轮合并重写完全部数据,每轮合并重写 1/X 的数据。
-
参考文档:default_progressive_merge_num
4. 合并流程
合并的基本流程如下:
- 转储(Dump):当 MemTable 的大小超过一定阈值时,系统会将 MemTable 中的数据转存到 SSTable 中以释放内存。
- 合并(Merge):当转储的次数超过一定阈值或在业务低峰期,系统会将基线 SSTable 与之后转储的增量 SSTable 合并为一个新的 SSTable。
- 调度与执行:从 V4.0.x 版本开始,合并采用统一合并策略,租户的所有 Zone 同时开始执行合并,所有 Zone 完成后才表示该租户完成合并。
参考文档:手动控制合并
总结
合并基线数据的操作是异步的,不会阻塞前台的读写操作。合并的具体参数和流程涉及多种合并类型、触发方式以及关键配置项。建议根据实际业务需求调整相关参数,例如 default_progressive_merge_num
,以优化合并性能。如果需要更详细的配置指导,可以参考官方文档中的相关内容。
具体信息可参考以下文档:
3 个赞
学习
2 个赞
合并基线数据是一个非常消耗集群资源的动作,如果是同步的话,那还怎么玩
2 个赞
学习学习
1 个赞
1 个赞
:+1
1 个赞
努力学习,总结经验
1 个赞
努力学习
1 个赞
加油
确实
加油哦
一起努力