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
评论列表(0条)