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
块不可合并,因为它们无法参与迁移。可以安全地清除它们的历史记录,而不会中断事务和快照读取:
涉及该数据块的最后一次迁移至少发生在
minSnapshotHistoryWindowInSeconds
值的数秒前。涉及该数据块的最后一次迁移至少发生在
transactionLifetimeLimitSeconds
值的数秒前。
例子
此示例假设所有数据段的历史记录均为空,并且所有数据段都是非巨型数据段。 由于这两个条件都为 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 |
步骤
结果
这些命令完成后,连续的块将被合并。总共有四个块,而不是原来的九个。
数据段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 |