自适应合并和major合并的疑问

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】 4.3.3
【问题描述】自适应合并和major合并的疑问
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
发现自适应合并是分区级别的,在考试obcp 4 材料中有个 sstable的关系
image

疑问1: 打开自适应合并后是不是就没有major sstable了。仅仅剩下medium sstable了
疑问2:自适应合并是分区级别的。 major 合并是租户级别的 。是不是合并降级了?

2 个赞

@论坛小助手

2 个赞

根据文档库中的信息,我将针对您的疑问进行解答。

疑问1:打开自适应合并后是不是就没有major sstable了。仅仅剩下medium sstable了

回答:

  • 自适应合并与Major合并的关系

    • 自适应合并不是完全替代 Major 合并(即租户级合并),而是补充和优化了分区级别的合并策略。根据文档片段1的描述,自适应合并实际调度的是分区级合并(MEDIUM_MERGE),它会适时地对有需求的分区发起合并任务。
    • 打开自适应合并后,系统仍然会执行 Major 合并(MAJOR_MERGE),但其频率可能会减少,因为自适应合并已经在一定程度上缓解了数据碎片化的问题。因此,并不是说打开了自适应合并就完全没有 Major SSTable 了,只是 Major 合并的触发条件和频率可能有所变化。
  • SSTable 类型

    • MINI_MERGE:将 MemTable 转变成 Mini SSTable。
    • MINOR_MERGE:多个 Mini SSTable 或多个 Mini SSTable 与 Minor SSTable 合成一个 Minor SSTable。
    • MEDIUM_MERGE:分区级合并,生成 Medium SSTable。
    • MAJOR_MERGE:租户级合并,生成 Major SSTable。

所以,打开自适应合并后,系统中依然会有 Major SSTable,只是其生成的频率可能会降低。

疑问2:自适应合并是分区级别的。 major 合并是租户级别的 。是不是合并降级了?

回答:

  • 合并级别

    • 自适应合并确实是在分区级别进行的(MEDIUM_MERGE),而 Major 合并是在租户级别进行的(MAJOR_MERGE)。但这并不意味着合并“降级”了。
    • 自适应合并的主要目的是在更细粒度的层面上优化数据合并,以应对频繁的 DML 操作、查询效率低等问题。它并不会取代 Major 合并的功能,而是作为一种补充机制来提高整体性能。
    • Major 合并在租户级别进行,可以确保整个租户的数据一致性,并且提供了一个天然的数据校验点,这对于数据完整性和一致性非常重要。
  • 合并效果

    • 自适应合并和 Major 合并各有侧重:
      • 自适应合并:更灵活,能够及时响应特定分区的数据变化,提升局部查询性能。
      • Major 合并:全局性更强,确保租户内所有分区的一致性,定期整合增量数据,提升整体读取性能。

因此,自适应合并和 Major 合并并不是简单的“升级”或“降级”关系,而是相辅相成的两种合并策略,共同作用于不同的场景和需求。

希望以上解答能帮助您更好地理解自适应合并和 Major 合并的区别和作用。如果您还有其他问题,欢迎继续提问!

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

  1. 手动触发合并
  2. OceanBase 术语
  3. GV$OB_COMPACTION_SUGGESTIONS
  4. V$OB_COMPACTION_SUGGESTIONS
  5. V$OB_COMPACTION_DIAGNOSE_INFO
3 个赞

Medium SSTable 怎么样和major sstable 进行融合成一个文件的?

2 个赞

@论坛小助手

2 个赞

根据文档库中的信息,我将详细解答关于 Medium SSTable 和 Major SSTable 如何融合的问题。

Medium SSTable 和 Major SSTable 的融合过程

1. 合并的触发条件

  • 自适应合并(MEDIUM_MERGE):这是分区级别的合并,通常由系统根据写入状态或用户设置自动触发。它会将多个 Mini SSTable 或者 Mini SSTable 与 Minor SSTable 合并成一个 Medium SSTable。
  • Major 合并(MAJOR_MERGE):这是租户级别的合并,通常在每天凌晨 2 点左右进行,或者由管理员手动触发。它会将当前大版本的 SSTable 和 MemTable 与前一个大版本的全量静态数据进行合并,生成新的全量数据。

2. 融合的具体过程

当 Major 合并被触发时,系统会执行以下步骤:

  1. 选择快照点

    • Major 合并会选取一个全局的快照点,确保租户内所有分区的数据都基于这个统一的快照点进行合并。
  2. 读取和合并数据

    • 读取数据:系统会读取当前的 Medium SSTable 和其他相关的 SSTable(包括 Mini 和 Minor SSTable),以及 MemTable 中的数据。
    • 合并数据:将这些数据按照键值顺序进行归并,消除重复项,并生成新的 SSTable 文件。这个过程中,系统会对数据进行两层压缩:
      • 第一层是数据库内部基于语义的编码压缩。
      • 第二层是基于用户指定压缩算法(如 lz4)的通用压缩。
  3. 生成新的 Major SSTable

    • 新生成的 SSTable 文件将包含所有已合并的数据,并且会替换旧的 SSTable 文件。这一步骤确保了数据的一致性和完整性。
  4. 更新元数据

    • 更新相关的元数据表(如 CDB_OB_MAJOR_COMPACTION),以反映最新的合并状态。

3. 验证合并完成

  • 可以通过查询 CDB_OB_MAJOR_COMPACTION 表来确认 Major 合并是否完成。具体命令如下:
    MySQL [oceanbase]> SELECT FROZEN_SCN, LAST_SCN FROM oceanbase.CDB_OB_MAJOR_COMPACTION;
    
    当所有的 FROZEN_SCNLAST_SCN 的值相等时,表示 Major 合并已经完成。

总结

Medium SSTable 和 Major SSTable 的融合并不是直接将两个文件简单地合并在一起,而是一个复杂的过程,涉及读取、排序、去重、压缩等多个步骤。最终生成的新 SSTable 文件会包含所有已合并的数据,并且会替换旧的 SSTable 文件,确保数据的一致性和高效性。

希望以上解答能帮助您更好地理解 Medium SSTable 和 Major SSTable 的融合过程。如果您还有其他问题,欢迎继续提问!

检索到的文档如下:

  1. 转储
  2. 体验 Operational OLAP
  3. 发现磁盘的静默错误
  4. 数据库对象存储
  5. OceanBase 数据库性能的影响因素
  6. OceanBase 术语
  7. 集群管理 FAQ
  8. 表存储
  9. 大对象和文本类型概述
  10. OceanBase AP 核心特性
2 个赞


这句话怎么理解 、 obcp v4考试材料的

1 个赞

又进步了

大概意思就是,原本的mini和minor sstable最终合并后变为major sstable而medium sstable即为最终形态了

1 个赞

按道理说应该变成major sstable才对吧。

major 会把medium sstable , mini sstable ,minor sstable , memtable都进行合并。

哪里写的有问题吗 ?

1 个赞

我上面描述有点问题,自适应合并生成的medium sstable等同于合并生成的major sstable,不是任何情况下都不变了,意思是当前自适应合并medium sstable即为最终样子

1 个赞

medium sstable即为最终样子。 如果下次major 还会把medium sstable 合并成 major sstable 不? 如果关闭了自适应

major合并会将medium sstable 合并成 major sstable

1 个赞