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

开始碎片化分片集合

本页内容

  • 关于此任务
  • 开始之前
  • 步骤
  • 下一步操作
  • 了解更多

要开始碎片化分片集合,请使用configureCollectionBalancing 命令,并将 defragmentCollection 选项设置为 true

碎片化是指将分片集合的数据分割成过多的小块。这可能会增加在该集合上运行CRUD操作的运行时间。碎片整理通过合并较小的块到较大的块来减少块的数量,从而降低CRUD操作的时间。

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

以下表格总结了不同MongoDB版本的碎片整理信息。

MongoDB版本
描述
MongoDB 7.0及以后
块会自动合并。在MongoDB 7.0中对集合进行碎片整理的性能提升低于MongoDB 6.0。通常,从MongoDB 7.0开始,您不需要对集合进行碎片整理。
MongoDB 6.0及之前

只有当在平衡器迁移块或节点启动时遇到CRUD操作延迟时,才需要对集合进行碎片整理。

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

MongoDB 6.0之前
只有当在元数据更新期间遇到CRUD操作时间延长时,才需要对集合进行碎片整理。对于MongoDB版本低于6.0的版本,当集合由于许多插入或更新操作而显著增长时,分片集合会变得碎片化。

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

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

连接到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 监控分片,参见审查分片集群

返回

碎片化分片集合