文档菜单
文档首页
/
MongoDB 手册
/ / /

取消分片集合

本页内容

  • 关于此任务
  • 访问控制
  • 开始之前
  • 步骤
  • 了解更多

您可以使用以下命令取消分片集合:unshardCollection 命令。当你取消分片一个集合时,该集合不能跨多个 分片 分区,并且会移除 分片键

默认情况下,当你取消分片一个集合时,MongoDB 会将集合的数据移动到数据量最少的那片分片。或者,你也可以指定将数据放置在哪个分片上。

您可以在以下环境中执行此任务

  • MongoDB Atlas:云中 MongoDB 部署的完全托管服务

注意

此任务在 Atlas 共享层或 Atlas 无服务器上不可用。

如果您的部署启用了访问控制,则enableSharding角色授予您运行unshardCollection命令的权限。

在解分你的集合之前,请确保满足以下要求

  • 你的应用程序可以容忍影响集合写入的 两秒 停顿期。在此期间,你的应用程序会经历延迟增加。

  • 你的数据库满足以下资源要求

    • 确保你要移动集合到的分片有足够的存储空间来容纳集合及其索引。目标分片需要至少 ( Collection storage size + Index Size ) * 2 字节可用。

    • 确保你的 I/O 容量低于 50%。

    • 确保你的 CPU 负载低于 80%。

1

如果你想要将你分片集合的数据放在特定的分片上,你需要目标分片的名称。

要查看你的集群中分片名称的列表,使用 listShards 命令

db.adminCommand( { listShards: 1 } )

shards._id 字段列出了每个分片的名称。

2

要解除集合的分区,运行 unshardCollection 命令。以下示例在 sales 数据库中解除名为 us_accounts 的集合的分区

db.adminCommand( {
unshardCollection: "sales.us_accounts",
toShard: "shard1"
} )

解除分区操作完成后,us_accounts 集合中的数据位于 shard1。如果您省略了 toShard 字段,数据将放置在数据量最少的数据分片上。

3

要确认集合已解除分区,使用 $shardedDataDistribution 阶段并尝试匹配未分区的命名空间

db.aggregate( [
{ $shardedDataDistribution: { } },
{ $match: { "ns": "sales.us_accounts" } }
] )

如果聚合操作不返回任何数据,则集合已解除分区。

返回

非分片集合