Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

AutoMerger

在此页面上

  • 行为
  • 详情
  • 例子

从 MongoDB 7.0开始,负载均衡器可以自动合并满足可合并性要求的数据段。

作为平衡操作的一部分,AutoMerger 在后台运行。对于大多数用例,默认设置表现良好。有关为部署自定义哪些设置的详细信息,请参阅 AutoMerger 政策。

当 AutoMerger 运行时,它会将每个集合的每个分片的所有可合并数据块序列压缩在一起。

除非明确禁用,否则 AutoMerger 会在首次启用负载负载均衡器时启动,并在例程清空后暂停以等待下一个 autoMergerIntervalSecs

启用 AutoMerger 后,每autoMergerIntervalSecs秒进行一次自动合并。

对于给定的集合,AutoMerger 保证后续合并至少延迟 autoMergerThrottlingMS 指定的时间。

如果设置了均衡窗口,AutoMerger 仅在该窗口期间运行。

自动合并是均衡操作的一部分。 为了决定是否以及何时执行自动合并,按以下顺序考虑设置:

  1. 全局负载均衡设置

  2. 每个集合的平衡设置(通过 configureCollectionBalancing 配置)

  3. 全局 AutoMerger 设置

  4. 每个集合的 AutoMerger 设置(通过 configureCollectionBalancing 配置)

mergeAllChunksOnShard 查找并合并同一分片上collection的所有可合并数据块。同一collection中的两个或多个连续数据块在满足以下所有条件时是可合并的:

  • 它们属于同一个分片。

  • 它们不是 jumbo 块。jumbo 块不可合并,因为它们无法参与迁移。

  • 可以安全地清除它们的历史记录,而不会中断事务和快照读取:

此示例假定所有数据块的历史记录为空,并且所有数据块都是非巨型数据块。由于这两个条件都成立,因此同一分片上的所有连续间隔都是可合并的

这些数据块属于一个名为 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

1
db.adminCommand( { mergeAllChunksOnShard: "db.coll", shard: "Shard0" } )

此命令会合并连续的数据段序列:

  • A-B-C-D

  • G-H

2
db.adminCommand( { mergeAllChunksOnShard: "db.coll", shard: "Shard1" } )

此命令会合并连续的数据段 EF 序列。

这些命令完成后,连续的块将被合并。总共有四个块,而不是原来的九个。

数据段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

后退

迁移范围

在此页面上