合并基线数据是异步的吗?

@论坛小助手 详细解答一下合并参数及流程,谢谢。

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. 合并流程

合并的基本流程如下:

  1. 转储(Dump):当 MemTable 的大小超过一定阈值时,系统会将 MemTable 中的数据转存到 SSTable 中以释放内存。
  2. 合并(Merge):当转储的次数超过一定阈值或在业务低峰期,系统会将基线 SSTable 与之后转储的增量 SSTable 合并为一个新的 SSTable。
  3. 调度与执行:从 V4.0.x 版本开始,合并采用统一合并策略,租户的所有 Zone 同时开始执行合并,所有 Zone 完成后才表示该租户完成合并。

参考文档:手动控制合并

总结

合并基线数据的操作是异步的,不会阻塞前台的读写操作。合并的具体参数和流程涉及多种合并类型、触发方式以及关键配置项。建议根据实际业务需求调整相关参数,例如 default_progressive_merge_num,以优化合并性能。如果需要更详细的配置指导,可以参考官方文档中的相关内容。

具体信息可参考以下文档:

  1. OceanBase 数据库性能的影响因素
  2. 自适应合并
  3. 合并管理概述
  4. 转储和合并概述
  5. 手动控制合并
  6. default_progressive_merge_num
  7. 使用 LOAD DATA 语句导入数据
  8. 分布式执行和并行查询
3 个赞

学习

2 个赞

合并基线数据是一个非常消耗集群资源的动作,如果是同步的话,那还怎么玩 :crazy_face:

2 个赞

学习学习

1 个赞

:facepunch: :facepunch: :facepunch:

1 个赞

:+1: :+1: :+1::+1: :+1

1 个赞

努力学习,总结经验 :+1: :+1: :+1:

1 个赞

努力学习

1 个赞

加油

确实

加油哦

一起努力