配置集合平衡
定义
兼容性
此命令可在以下环境中部署
MongoDB Atlas:云中MongoDB部署的全托管服务
注意
此命令支持所有MongoDB Atlas集群。有关Atlas对所有命令的支持信息,请参阅不受支持的命令。
MongoDB Enterprise:基于订阅的自托管MongoDB版本
MongoDB Community:开源、免费使用、自托管MongoDB版本
语法
该命令具有以下语法
db.adminCommand( { configureCollectionBalancing: "<db>.<collection>", chunkSize: <num>, defragmentCollection: <bool> enableAutoMerger: <bool> } )
命令字段
configureCollectionBalancing
具有以下字段
字段 | 类型 | 必要性 | 描述 |
---|---|---|---|
配置集合平衡 | string | 必需 | 要配置的数据库和分片集合的名称。 |
chunkSize | integer | 可选 | 为集合设置MiB级别的块大小。建议大小为256、512或更大。有关默认行为详情,请参阅未指定chunkSize时的默认行为。 |
defragmentCollection | boolean | 可选 | 使平衡器对集合进行碎片整理。默认为 false 。 |
enableAutoMerger | boolean | 可选 | 是否将此集合考虑在内AutoMerger。默认为 true 。 |
更多信息,请参阅使用块的数据分区。
要配置块碎片整理节流时间参数,请参阅chunkDefragmentationThrottlingMS
。
要了解碎片化分片集合,请参阅碎片化分片集合。
行为
未指定chunkSize时的默认行为
如果您未为集合指定chunkSize
且之前未设置自定义大小,则使用全局默认的chunkSize
进行平衡。
指定chunkSize: 0
如果您使用configureCollectionBalancing
与chunkSize: 0
,则重置每个集合的chunkSize
并使用全局默认的chunkSize
进行平衡。
有关配置默认 chunkSize
的更多信息,请参阅 在分片集群中修改范围大小。
未指定 enableAutoMerger 时的默认行为
如果您未指定集合的 enableAutoMerger
且之前未设置自定义自动合并行为,则默认为 true
,并将由 AutoMerger 考虑。
示例
配置块大小
要更改分片集合的块大小,请使用 chunkSize
选项
db.adminCommand( { configureCollectionBalancing: "test.students", chunkSize: 256 } )
使用此命令更改给定集合的块大小。
警告
默认情况下,MongoDB 如果块中的文档数大于配置的块大小除以平均文档大小的两倍,则无法移动块。
要查找平均文档大小,请参阅 db.collection.stats()
方法输出的 avgObjSize
字段。
有关更多信息,请参阅 范围大小。
碎片化集合
警告
我们不推荐在 MongoDB 6.0.0 至 6.0.3 和 MongoDB 6.1.0 至 6.1.1 版本中使用 defragmentCollection
来碎片化分片集合,因为这些版本的碎片化过程可能会使数据库和集合在长时间内不可用。
要指示均衡器碎片化分片集合,请使用 defragmentCollection
选项
db.adminCommand( { configureCollectionBalancing: "test.students", defragmentCollection: true } )
使用此命令让均衡器碎片化分片集合。要监控数据分片碎片化过程,请使用 balancerCollectionStatus
命令。
有关碎片化分片集合的更多信息,请参阅 碎片化分片集合。
重新配置和碎片化集合
要在更新数据分片大小时碎片化分片集合,请同时使用 defragmentCollection
选项和 chunkSize
选项
db.adminCommand( { configureCollectionBalancing: "test.students", chunkSize: 512, defragmentCollection: true } )
禁用集合上的自动合并
要显式禁用集合上的自动合并,将 enableAutoMerger
选项设置为 false
db.adminCommand( { configureCollectionBalancing: "test.students", enableAutoMerger: false } )