unshardCollection
定义
unshardCollection
对现有分分片的集合进行取消分片,并将集合数据移动到单个分片片上。 当您对集合取消分片时,无法将该集合跨多个分片进行分区,并且分片分片键将被删除。
8.0版本新增。
提示
在
mongosh
中,该命令也可以通过sh.unshardCollection()
运行。辅助方法对
mongosh
用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。此命令必须在
admin
数据库上运行。注意
对集合取消分片是一项写入密集型操作,可能会导致oplog增长率加快。 为帮助缓解此问题,请考虑对配置进行以下更改:
要防止oplog无限制增长,请设立固定的oplog大小。
要降低从节点过时的可能性,请增加oplog的大小。
有关更多详细信息,请参阅副本集oplog 。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
此命令不能在共享实例或无服务器实例上运行。 有关更多信息,请参阅不支持的命令。
限制
不能将unshardCollection
用于:
语法
db.adminCommand( { unshardCollection: "<database>.<collection>", toShard: "<shard-id>" } )
命令字段
字段 | 类型 | 必要性 | 说明 |
---|---|---|---|
unshardCollection | 字符串 | 必需 | 指定要取消分片的数据库和集合。 |
toShard | 字符串 | Optional | 指定接收分分片ID。 当MongoDB对集合进行取消分片时,会将集合数据从当前分片移动到此特定分分片。 如果未指定,集群会选择分片量最少的分片。 |
Considerations
unshardCollection
只能在分分片的集群上运行。unshardCollection
只能对分分片的集合进行操作。unshardCollection
一次只能对一个集合进行操作。unshardCollection
最短持续时间为5分钟。您必须在
unshardCollection
运行后重建Atlas Search索引。在
unshardCollection
完成之前,您无法进行拓扑结构更改,例如添加或删除分片或在嵌入式配置服务器和专用配置服务器之间转换。当
unshardCollection
正在进行时,您无法对正在取消分片的集合运行以下操作:unshardCollection
正在进行时,您无法对集群运行以下操作:在
unshardCollection
正在进行时进行的索引构建可能会静默失败。正在进行
unshardCollection
时,请勿创建索引。如果正在进行索引构建,请勿调用
unshardCollection
。
要求
在对集合取消分片之前,请确保满足以下要求:
您的应用程序可以允许受影响的集合块进行两秒钟的写入。 在写入受阻期间,应用程序的延迟会增加。
您的数据库符合这些资源要求:
确保分片集合移动到的分片具有足够的存储空间用于集合及其索引。 目标分分片需要至少
( Collection storage size + Index Size ) * 2
字节可用。确保 I/O容量低于50 %。
确保 CPU 负载低于80 %。
示例
对集合取消分片
以下示例对sales.eu_accounts
集合取消分片:
db.adminCommand( { unshardCollection: "sales.eu_accounts" } )
取消分片到特定分片
以下示例对sales.us_accounts
集合进行取消分片,并将集合数据放在shard1
上:
db.adminCommand( { unshardCollection: "sales.eu_accounts", toShard: "shard1" } )