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

监控分片集合的解碎片化

本页内容

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

要监控分片集合的解碎片化,请使用balancerCollectionStatus 命令。

您可以看到当前的解碎片化状态和剩余待处理的碎片数。这显示了解碎片化的进度。

解碎片化使用以下阶段来减少集合中的碎片数量并提高性能

  1. 合并同一分片上可以合并的碎片。

  2. 将较小的碎片迁移到其他分片。较小的碎片是指包含的数据少于25%的 chunkSize 设置。

  3. 合并同一分片上剩余的可合并碎片。

此任务中的步骤使用了一个名为 ordersShardedCollection 的示例分片集合,该集合位于名为 test 的数据库中。

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

在此任务的步骤中,您将监控阶段并查看解碎片化的进度。

1

运行

db.adminCommand(
{
balancerCollectionStatus: "test.ordersShardedCollection"
}
)
2

上一个命令返回包含碎片整理状态、当前阶段和剩余碎片整理工作的文档。例如

{
"balancerCompliant": false,
"firstComplianceViolation": "defragmentingChunks",
"details": {
"currentPhase": "moveAndMergeChunks",
"progress": { "remainingChunksToProcess": 1 }
}
}

以下表格描述了文档字段。

字段
类型
描述
balancerCompliant
布尔型
false 如果集合块必须移动。否则,true
firstComplianceViolation
字符串
指示必须移动或合并命名空间块的原因。只有当 balancerCompliantfalse 时返回。
details
对象
关于当前碎片整理状态的其他信息。只有当 firstComplianceViolationdefragmentingChunks 时返回。
currentPhase
字符串

当前碎片整理阶段

  • 对于第一阶段,currentPhasemergeAndMeasureChunks

    第一阶段合并位于同一分片上的连续块,并计算这些块的数据大小。

  • 对于第二阶段,currentPhasemoveAndMergeChunks

    第一阶段完成后,可能会有一些小块剩余。第二阶段将这些小块迁移到其他分片,并合并这些分片上的块。

remainingChunksToProcess
整数
当前阶段剩余要处理的块的数量。

有关返回文档字段的更多信息,请参阅碎片整理集合状态输出文档。

3

碎片整理完成后,命令返回以下之一

  • balancerCompliant: true 如果您的集合已平衡。

  • balancerCompliant: false,且firstComplianceViolation设置为除defragmentingChunks之外的其他字符串,如果您的集合未平衡。

碎片整理完成后平衡集合的示例输出

{
chunkSize: 0.2,
balancerCompliant: true,
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1677543079, i: 1 }),
signature: {
hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0),
keyId: Long("0")
}
},
operationTime: Timestamp({ t: 1677543079, i: 1 })
}

如果碎片整理尚未完成,您可以停止它。有关详细信息,请参阅停止碎片整理分片集合。

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

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

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

  • 查看活动 mongos 实例,请参阅活动 mongos 实例

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

返回

开始