停止对集合取消分片
您可以使用 abortUnshardCollection
命令停止对分分片的集合进行取消分片。
关于此任务
要停止正在进行的unshardCollection
操作,请运行abortUnshardCollection
命令。
注意
取消分片是一个写入密集型进程,可以提高oplog的速率。 您可能希望:
设置固定的 oplog 大小以防止 oplog 无限增长。
增加 oplog 大小以最大限度地减少一个或多个从节点过时的可能性。
有关更多详细信息,请参阅副本集 Oplog 文档。
兼容性
您可以对以下环境中托管的部署执行此任务:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
此任务在Atlas共享层或Atlas Serverless 上不可用。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
限制
abortUnshardCollection
只能在分分片的集群上运行。abortUnshardCollection
只能对分分片的集合进行操作。abortUnshardCollection
一次只能对一个集合进行操作。在
abortUnshardCollection
完成之前,您无法进行拓扑结构更改,例如添加或删除分片或在嵌入式配置服务器和专用配置服务器之间转换。当
abortUnshardCollection
正在进行时,您无法对正在取消分片的集合运行以下操作:unshardCollection
正在进行时,您无法对集群运行以下操作:在
abortUnshardCollection
正在进行时进行的索引构建可能会静默失败。正在进行
abortUnshardCollection
时,请勿创建索引。如果正在进行索引构建,请勿调用
abortUnshardCollection
。
访问控制
如果您的部署启用了访问权限控制,则enableSharding
角色会授予您运行abortUnshardCollection
命令的访问权限。
步骤
停止对集合取消分片
要停止对集合取消分片,请运行abortUnshardCollection
命令。 以下示例停止对sales
数据库中的us_accounts
执行unshardCollection
操作:
db.adminCommand( { abortUnshardCollection: "sales.us_accounts", } )
确认取消分片操作已停止
要确认unshardCollection
操作已停止,请使用sh.status()
方法:
sh.status()
此示例输出显示使用其分片的分分片键进行分片的集合:
collections: { 'sales.us_accounts': { shardKey: { account_number: 1 }, unique: false, balancing: true, chunkMetadata: [ { shard: 'shard-0', nChunks: 1 }, { shard: 'shard-1', nChunks: 1 } ], chunks: [ { min: { _id: MinKey() }, max: { _id: Long('0') }, 'on shard': 'shard-0', 'last modified': Timestamp({ t: 1, i: 0 }) }, { min: { _id: Long('0') }, max: { _id: MaxKey() }, 'on shard': 'shard-1', 'last modified': Timestamp({ t: 1, i: 1 }) } ], ... } ... }