mergeAllChunksOnShard
定义
mergeAllChunksOnShard
mergeAllChunksOnShard
查找并合并给定集合中碎片拥有的所有可合并碎片。
兼容性
此命令可在以下环境中部署
MongoDB Atlas:云中MongoDB部署的全托管服务
重要
此命令不支持无服务器实例。有关更多信息,请参阅 不受支持的命令。
MongoDB Enterprise:基于订阅的自托管MongoDB版本
MongoDB 社区版:MongoDB 的开源、免费使用和自管理版本
语法
该命令具有以下语法
db.adminCommand( { mergeAllChunksOnShard: <name of the collection>, shard: <name of the shard>, maxNumberOfChunksToMerge: <maximum number of chunks to merge> /* optional */ } )
命令字段
该命令接受以下字段
字段 | 类型 | 必要性 | 描述 |
---|---|---|---|
mergeAllChunksOnShard | string | Required | 集合名称。 |
shard | string | Required | 分片名称。 |
maxNumberOfChunksToMerge | integer | Optional | 最大合并块数。 |
行为
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 |