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

开始对分片集合进行碎片整理

在此页面上

  • 关于此任务
  • 开始之前
  • 步骤
  • 后续步骤
  • 了解详情

要开始对分片集合进行分片的整理,请使用 configureCollectionBalancing命令,并将defragmentCollection选项设立为true

碎片是指分片的集合的数据被分解为不必要的大量小数据段。 这会增加在该集合上运行的CRUD操作的操作时间。 碎片整理通过将较小的数据段合并为较大的数据段来减少数据段的数量,从而缩短CRUD操作时间。

如果CRUD操作时间可以接受,则无需对集合进行碎片整理。

下表汇总了各种MongoDB版本的碎片整理信息。

MongoDB 版本
说明
MongoDB 7.0及更高版本
数据段会自动合并。 与MongoDB 6.0相比,在MongoDB 7.0中对集合进行碎片整理所带来的性能提升较低。 通常,您不需要对从MongoDB 7.0开始的集合进行碎片整理。
MongoDB 6.0及7.0之前的版本

仅当负载均衡器迁移数据块或节点启动之际出现 CRUD 操作延迟时,才对集合进行碎片整理。

从 MongoDB 6.0 开始,高写入流量不会导致碎片化。数据块迁移会导致碎片化。

早于 MongoDB 6.0
仅当在元数据更新期间遇到较长的 CRUD 操作时间时,才对集合进行碎片整理。适用于 6.0 之前的 MongoDB 版本,当集合大小由于许多插入或更新操作而显著增长时,分片集合会变得碎片化。

此任务中的过程使用名为 test 的数据库中名为 ordersShardedCollection 的示例分片集合。

在此过程中,您可以使用自己的分片集合和数据库。

连接到 mongos

1

运行:

db.adminCommand(
{
configureCollectionBalancing: "test.ordersShardedCollection",
defragmentCollection: true
}
)
2

确保命令输出中的ok1 ,这表示命令执行成功:

{
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1677616966, i: 8 }),
signature: {
hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0),
keyId: Long("0")
}
},
operationTime: Timestamp({ t: 1677616966, i: 8 })
}

您可以监控集合的碎片整理进度。 有关详细信息,请参阅监控分片集合的碎片整理。

  • 打印分片状态,请参阅 db.printShardingStatus()

  • 检索分片状态详细信息,请参阅 sh.status()

  • 要查看分片状态集合字段,请参阅分片集合

  • 要查看活跃的 mongos 实例,请参阅活跃的 mongos 实例

  • 使用 MongoDB Atlas 监控分片,请参阅查看分片集群

后退

对分片集合进行碎片整理