configureCollectionBalancing
定义
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
该命令具有以下语法:
db.adminCommand( { configureCollectionBalancing: "<db>.<collection>", chunkSize: <num>, defragmentCollection: <bool> enableAutoMerger: <bool> } )
命令字段
configureCollectionBalancing
有以下字段:
字段 | 类型 | 必要性 | 说明 |
---|---|---|---|
| 字符串 | 必需 | 要配置的数据库和分片collection的名称。 |
| 整型 | Optional | 设置集合的数据段大小(以数据块为单位)。建议的大小为256 、512 或更大。有关默认行为的详细信息,请参阅未指定 chunkSize 时的默认行为。 |
| 布尔 | Optional | 导致负载均衡器对集合进行碎片整理。 默认为 |
| 布尔 | Optional | AutoMerger是否考虑此collection。默认为 |
有关更多信息,请参阅使用数据块进行数据分区。
要配置数据块碎片整理限制时间参数,请参阅chunkDefragmentationThrottlingMS
。
要了解如何对分片集合进行碎片整理,请参阅对分片集合进行碎片整理。
行为
未指定 chunkSize 时的默认行为
如果您没有为collection指定chunkSize
,也没有设置自定义大小,则使用全局默认chunkSize
进行负载均衡。
指定 chunkSize: 0
如果使用 configureCollectionBalancing
和 chunkSize: 0
,则会重置每个集合的 chunkSize
,并使用全局默认chunkSize
进行均衡操作。
有关配置默认chunkSize
的更多信息,请参阅修改分片集群中的范围大小。
未指定 enableAutoMerger 时的默认行为
如果您没有为collection指定enableAutoMerger
,并且以前没有设置自定义自动合并行为,则defaults为true
,并且 AutoMerger 将予以考虑。
示例
配置数据块大小
要更改分片collection的数据块大小,请使用chunkSize
选项:
db.adminCommand( { configureCollectionBalancing: "test.students", chunkSize: 256 } )
使用此命令可更改给定collection的数据块大小。
警告
默认,如果数据段中的数据块数据块大于配置的数据数据块大小除以平均文档大小所得结果的2倍,则MongoDB无法移动该数据段。
要查找平均文档大小,请参阅db.collection.stats()
方法输出中的avgObjSize
字段。
有关详细信息,请参阅范围大小。
对collection进行碎片整理
警告
我们不建议使用defragmentCollection
对 MongoDB 6.0.0 到 6.0.3 以及 MongoDB 6.1.0 的collection进行碎片整理至 6.1.1、 因为这些版本上的碎片整理过程可能会导致数据库和集合长时间不可用。
要指示负载均衡器对分片collection进行碎片整理,请使用defragmentCollection
选项:
db.adminCommand( { configureCollectionBalancing: "test.students", defragmentCollection: true } )
使用此命令可让负载均衡器对分片collection进行碎片整理。要监控数据段碎片整理进程,请使用balancerCollectionStatus
命令。
要了解有关对分片collection进行碎片整理的更多信息,请参阅对分片collection进行碎片整理。
重新配置collection并进行碎片整理
要在更新数据段大小时对分片集合进行碎片整理,请同时使用defragmentCollection
选项和chunkSize
选项:
db.adminCommand( { configureCollectionBalancing: "test.students", chunkSize: 512, defragmentCollection: true } )
禁用collection上的 AutoMerger
要显式禁用collection上的 AutoMerger,请将enableAutoMerger
选项设置为false
:
db.adminCommand( { configureCollectionBalancing: "test.students", enableAutoMerger: false } )