Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

对集合取消分片

在此页面上

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

您可以使用 unshardCollection命令对分分片的集合取消分片。 当您对集合取消分片时,该集合无法跨多个分片分区,并且分片分片键将被删除。

默认,当您对集合取消分片时, MongoDB会将集合的数据移动到分片量最少的分片。 或者,您可以分片要放置数据的分片。

您可以对以下环境中托管的部署执行此任务:

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

注意

此任务在Atlas共享层或Atlas Serverless 上不可用。

如果您的部署启用了访问权限控制,则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" } }
] )

如果聚合未返回任何数据,则不对集合进行分片。

后退

未分片集合