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

监控分片集合的碎片整理

在此页面上

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

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

您可以查看当前的碎片整理状态以及要处理的剩余数据段数量。 这会向您显示碎片整理进度。

碎片整理使用以下阶段来减少集合中数据段的数量并提高性能:

  1. 合并同一分片上可合并的数据段。

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

  3. 合并可合并的同一分片上的剩余数据段。

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

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

在此任务的过程中,您将监控各个阶段并查看碎片整理进度。

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 如果您的collection不均衡,则将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 监控分片,请参阅查看分片集群

后退

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

来年

停止对分片集合进行碎片整理