碎片是指分片集合的数据被分解为不必要的大量小数据段。这会增加在该集合上运行的 CRUD 操作的操作时间。碎片整理通过将较小的数据段合并为较大的数据段来减少数据段的数量,从而缩短 CRUD 操作时间。
如果 CRUD 操作时间可以接受,则无需对集合进行碎片整理。
下表汇总了各种 MongoDB 版本的碎片整理信息。
在移动、分割或合并数据段时,分片元数据会在配置服务器提交数据段操作后更新。未参与数据段操作的分片也会使用新的元数据更新。
分片元数据更新时间与路由表大小成正比。在更新分片元数据时,将暂时阻止对集合的 CRUD 操作,较小的路由表意味着更短的 CRUD 操作延迟。
对集合进行碎片整理可以减少数据段数量以及更新数据段元数据的时间。
碎片整理使用以下阶段来减少集合中数据段的数量并提高性能:
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的运行时间,而不是手动启动和停止碎片整理。
手动停止
db.adminCommand(
{
configureCollectionBalancing: "user_center.newusers",
defragmentCollection: false
}
)
手动启动
db.adminCommand(
{
configureCollectionBalancing: "user_center.newusers",
defragmentCollection: true
}
)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。