Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

mergeAllChunksOnShard

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 例子
mergeAllChunksOnShard

mergeAllChunksOnShard 查找并合并分片在给定分片中拥有的所有个可合并数据段

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

重要

无服务器实例不支持此命令。 有关更多信息,请参阅不支持的命令。

  • MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本

  • MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本

该命令具有以下语法:

db.adminCommand(
{
mergeAllChunksOnShard: <name of the collection>,
shard: <name of the shard>,
maxNumberOfChunksToMerge: <maximum number of chunks to merge> /* optional */
}
)

该命令接受以下字段:

字段
类型
必要性
说明

mergeAllChunksOnShard

字符串

必需

集合的名称。

shard

字符串

必需

分片的名称。

maxNumberOfChunksToMerge

整型

Optional

要合并的最大数据块数。

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

  • 它们属于同一个分片。

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

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

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

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

后退

列出分片