Starting in MongoDB 7.0, the balancer can automatically merge chunks that meet the mergeability requirements.
行为
The AutoMerger runs in the background as part of balancing operations. For most use cases, the default settings perform well. For details on which settings to customize for your deployment, see AutoMerger Policy.
当 AutoMerger 运行时,它会将每个集合的每个分片的所有可合并数据块序列压缩在一起。
AutoMerger 政策
除非明确禁用,否则 AutoMerger 将在负载均衡器第一次启用时启动,并在例程耗尽后暂停下一个 autoMergerIntervalSecs。
启用 AutoMerger 后,每autoMergerIntervalSecs秒进行一次自动合并。
对于给定的集合,AutoMerger 保证后续合并至少延迟 autoMergerThrottlingMS 指定的时间。
如果设置了均衡窗口,AutoMerger 仅在该窗口期间运行。
均衡设置优先级
自动合并是均衡操作的一部分。 为了决定是否以及何时执行自动合并,按以下顺序考虑设置:
全局负载均衡设置
每个集合的平衡设置(通过
configureCollectionBalancing配置)每个集合的 AutoMerger 设置(通过
configureCollectionBalancing配置)
详情
mergeAllChunksOnShard 查找并合并同一分片上collection的所有可合并数据块。同一collection中的两个或多个连续数据块在满足以下所有条件时是可合并的:
它们属于同一个分片。
它们不是 jumbo 块。
jumbo块不可合并,因为它们无法参与迁移。可以安全地清除它们的历史记录,而不会中断事务和快照读取:
涉及该数据块的最后一次迁移至少发生在
minSnapshotHistoryWindowInSeconds值的数秒前。涉及该数据块的最后一次迁移至少发生在
transactionLifetimeLimitSeconds值的数秒前。
例子
此示例假定所有数据块的历史记录为空,并且所有数据块都是非巨型数据块。由于这两个条件都成立,因此同一分片上的所有连续间隔都是可合并的。
设置
这些数据块属于一个名为 coll 的集合,其分片键为 x。总共有九个数据块。
数据段ID | Min | Max | 分片 |
|---|---|---|---|
A |
|
| 分片0 |
B |
|
| 分片0 |
C |
|
| 分片0 |
D |
|
| 分片0 |
E |
|
| 分片 1 |
F |
|
| 分片 1 |
G |
|
| 分片0 |
h |
|
| 分片0 |
I |
|
| 分片 1 |
步骤
结果
这些命令完成后,连续的块将被合并。总共有四个块,而不是原来的九个。
数据段ID | Min | Max | 分片 |
|---|---|---|---|
A-B-C-D |
|
| 分片0 |
E-F |
|
| 分片 1 |
G-H |
|
| 分片0 |
I |
|
| 分片 1 |