MongoDB 监控碎片整理的状态和进度

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

MongoDB 监控碎片整理的状态和进度

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

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

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

在移动、分割或合并数据段时,分片元数据会在配置服务器提交数据段操作后更新。未参与数据段操作的分片也会使用新的元数据更新。

分片元数据更新时间与路由表大小成正比。在更新分片元数据时,将暂时阻止对集合的 CRUD 操作,较小的路由表意味着更短的 CRUD 操作延迟。

对集合进行碎片整理可以减少数据段数量以及更新数据段元数据的时间。

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

  • 合并同一分片上可合并的数据段。
  • 将较小的数据段迁移到其他分片。 小数据段是指包含的数据少于chunkSize设置的25 %。
  • 合并可合并的同一分片上的剩余数据段。

查看状态

代码语言:txt复制
db.adminCommand(
   {
      balancerCollectionStatus: "test.ordersShardedCollection"
   }
)

如果是未完成的状态,则类似如下:
{
   "balancerCompliant": false,
   "firstComplianceViolation": "defragmentingChunks",
   "details": {
      "currentPhase": "moveAndMergeChunks",
      "progress": { "remainingChunksToProcess": 1 }
   }
}


如果是完成的状态,则类似如下:
{
  chunkSize: 128,
  balancerCompliant: true,
  ok: 1,
  '$clusterTime': {
    clusterTime: Timestamp({ t: 1728010226, i: 2 }),
    signature: {
      hash: Binary.createFromBase64('AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0),
      keyId: Long('0')
    }
  },
  operationTime: Timestamp({ t: 1728010226, i: 2 })
}

启动和停止碎片整理

通常,您应使用分片均衡窗口来指定balancer的运行时间,而不是手动启动和停止碎片整理。

手动停止

代码语言:txt复制
db.adminCommand(
   {
      configureCollectionBalancing: "user_center.newusers",
      defragmentCollection: false
   }
)

手动启动

代码语言:txt复制
db.adminCommand(
   {
      configureCollectionBalancing: "user_center.newusers",
      defragmentCollection: true
   }
)

发布者:admin,转转请注明出处:http://www.yc00.com/web/1755022440a5227522.html

相关推荐

  • MongoDB 监控碎片整理的状态和进度

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

    1月前
    180

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信