自动合并器
从MongoDB 7.0版本开始,均衡器可以自动合并满足合并要求的碎片行为.
行为
AutoMerger作为平衡操作的组成部分在后台运行。对于大多数用例,默认设置表现良好。有关针对您的部署自定义哪些设置的详细信息,请参阅AutoMerger策略。
当AutoMerger运行时,它会将每个集合每个分片的可合并碎片的序列压缩在一起。
AutoMerger策略
除非显式禁用,否则AutoMerger在第一次启用均衡器时启动,并在常规操作完成后暂停autoMergerIntervalSecs
秒后。
当AutoMerger启用时,每autoMergerIntervalSecs
秒就会发生自动合并。
对于给定的集合,AutoMerger保证后续合并至少延迟指定的时间,该时间由autoMergerThrottlingMS
指定。
如果设置了平衡窗口,则AutoMerger只在窗口期间运行。
平衡设置优先级
自动合并作为平衡操作的一部分发生。为了决定何时执行自动合并,按照以下顺序考虑设置
全局平衡设置
每个集合的平衡设置(由
configureCollectionBalancing
配置)全局自动合并设置
每个集合的自动合并设置(由
configureCollectionBalancing
配置)
详细信息
mergeAllChunksOnShard
在同一个分片上查找并合并集合的所有可合并块。在同一集合中的两个或更多连续块在满足以下所有条件时是可合并的
它们属于同一个分片。
它们不是大块。大块不可合并,因为它们不能参与迁移。
它们的历史可以被安全地清除,而不会破坏事务和快照读取
涉及该块的最后一次迁移至少在
minSnapshotHistoryWindowInSeconds
之前这么多秒。涉及该块的最后一次迁移至少在
transactionLifetimeLimitSeconds
之前这么多秒。
示例
此示例假定所有块的历史记录为空,并且所有块都是非巨型块。由于这两个条件都成立,同一分片上的所有连续区间都是可合并的。
设置
这些块属于名为 coll
的集合,分片键为 x
。总共有九个块。
块 ID | 最小 | 最大 | 分片 |
---|---|---|---|
A | x: 0 | x: 10 | Shard0 |
B | x: 10 | x: 20 | Shard0 |
C | x: 20 | x: 30 | Shard0 |
D | x: 30 | x: 40 | Shard0 |
E | x: 40 | x: 50 | Shard1 |
F | x: 50 | x: 60 | Shard1 |
G | x: 60 | x: 70 | Shard0 |
H | x: 70 | x: 80 | Shard0 |
I | x: 80 | x: 90 | Shard1 |
步骤
结果
完成这些命令后,连续的块已合并。现在总共有四个块,而不是原来的九个。
块 ID | 最小 | 最大 | 分片 |
---|---|---|---|
A-B-C-D | x: 0 | x: 40 | Shard0 |
E-F | x: 40 | x: 60 | Shard1 |
G-H | x: 60 | x: 80 | Shard0 |
I | x: 80 | x: 90 | Shard1 |