AutoMerger
从 MongoDB 7.0开始,负载均衡器可以自动合并满足可合并性要求的数据段。
行为
作为平衡操作的一部分,AutoMerger 在后台运行。对于大多数用例,默认设置表现良好。有关为部署自定义哪些设置的详细信息,请参阅 AutoMerger 政策。
当 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 | x: 0 | x: 10 | 分片0 |
B | x: 10 | x: 20 | 分片0 |
C | x: 20 | x: 30 | 分片0 |
D | x: 30 | x: 40 | 分片0 |
E | x: 40 | x: 50 | 分片 1 |
F | x: 50 | x: 60 | 分片 1 |
G | x: 60 | x: 70 | 分片0 |
h | x: 70 | x: 80 | 分片0 |
I | x: 80 | x: 90 | 分片 1 |
步骤
结果
这些命令完成后,连续的块将被合并。总共有四个块,而不是原来的九个。
数据段ID | Min | Max | 分片 |
---|---|---|---|
A-B-C-D | x: 0 | x: 40 | 分片0 |
E-F | x: 40 | x: 60 | 分片 1 |
G-H | x: 60 | x: 80 | 分片0 |
I | x: 80 | x: 90 | 分片 1 |