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

疑问1: 打开自适应合并后是不是就没有major sstable了。仅仅剩下medium sstable了
疑问2:自适应合并是分区级别的。 major 合并是租户级别的 。是不是合并降级了?
2 个赞
论坛小助手
#4
根据文档库中的信息,我将针对您的疑问进行解答。
疑问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 合并的区别和作用。如果您还有其他问题,欢迎继续提问!
具体信息可参考以下文档:
- 手动触发合并
- OceanBase 术语
- GV$OB_COMPACTION_SUGGESTIONS
- V$OB_COMPACTION_SUGGESTIONS
- V$OB_COMPACTION_DIAGNOSE_INFO
3 个赞
Giant
#5
Medium SSTable 怎么样和major sstable 进行融合成一个文件的?
2 个赞
论坛小助手
#7
根据文档库中的信息,我将详细解答关于 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 合并被触发时,系统会执行以下步骤:
-
选择快照点:
- Major 合并会选取一个全局的快照点,确保租户内所有分区的数据都基于这个统一的快照点进行合并。
-
读取和合并数据:
-
读取数据:系统会读取当前的 Medium SSTable 和其他相关的 SSTable(包括 Mini 和 Minor SSTable),以及 MemTable 中的数据。
-
合并数据:将这些数据按照键值顺序进行归并,消除重复项,并生成新的 SSTable 文件。这个过程中,系统会对数据进行两层压缩:
- 第一层是数据库内部基于语义的编码压缩。
- 第二层是基于用户指定压缩算法(如 lz4)的通用压缩。
-
生成新的 Major SSTable:
- 新生成的 SSTable 文件将包含所有已合并的数据,并且会替换旧的 SSTable 文件。这一步骤确保了数据的一致性和完整性。
-
更新元数据:
- 更新相关的元数据表(如
CDB_OB_MAJOR_COMPACTION
),以反映最新的合并状态。
3. 验证合并完成
总结
Medium SSTable 和 Major SSTable 的融合并不是直接将两个文件简单地合并在一起,而是一个复杂的过程,涉及读取、排序、去重、压缩等多个步骤。最终生成的新 SSTable 文件会包含所有已合并的数据,并且会替换旧的 SSTable 文件,确保数据的一致性和高效性。
希望以上解答能帮助您更好地理解 Medium SSTable 和 Major SSTable 的融合过程。如果您还有其他问题,欢迎继续提问!
检索到的文档如下:
- 转储
- 体验 Operational OLAP
- 发现磁盘的静默错误
- 数据库对象存储
- OceanBase 数据库性能的影响因素
- OceanBase 术语
- 集群管理 FAQ
- 表存储
- 大对象和文本类型概述
- OceanBase AP 核心特性
2 个赞
辞霜
#10
大概意思就是,原本的mini和minor sstable最终合并后变为major sstable而medium sstable即为最终形态了
1 个赞
Giant
#11
按道理说应该变成major sstable才对吧。
major 会把medium sstable , mini sstable ,minor sstable , memtable都进行合并。
哪里写的有问题吗 ?
1 个赞
辞霜
#12
我上面描述有点问题,自适应合并生成的medium sstable等同于合并生成的major sstable,不是任何情况下都不变了,意思是当前自适应合并medium sstable即为最终样子
1 个赞
Giant
#13
medium sstable即为最终样子。 如果下次major 还会把medium sstable 合并成 major sstable 不? 如果关闭了自适应
辞霜
#14
major合并会将medium sstable 合并成 major sstable
1 个赞