$shardedDataDistribution(聚合)
定义
$shardedDataDistribution
6.0.3 版本新增。
返回分片集合中的数据分布信息。
注意
此聚合阶段仅适用于
mongos
。此聚合阶段必须在
admin
数据库上运行。用户必须具有shardedDataDistribution
权限操作。
语法
shardedDataDistribution
阶段使用以下语法:
db.aggregate( [ { $shardedDataDistribution: { } } ] )
输出字段
$shardedDataDistribution
阶段输出数据库中每个分片集合的文档数组。 这些文档包含以下字段:
字段名称 | 数据类型 | 说明 |
---|---|---|
| 字符串 | 分片集合的命名空间。 |
| 阵列 | 集合中的分片以及每个分片的数据分布信息。 |
| 整型 | 分片中的孤立文档的数量。 |
| 整型 | 分片拥有的文档数。 |
| 整型 | 解压缩分片片拥有的文档大小(以字节为单位)。 |
| 整型 | 未压缩分片片中孤立文档的大小(以字节为单位)。 |
从 MongoDB8.0 $shardedDataDistribution
开始,仅当主分片包含数据段或 孤立文档 时, 才会返回集合 主 分片的输出。
行为
使用 Wiredmongod
Tiger存储引擎的 非正常关闭后,$shardedDataDistribution
报告的大小和计数统计信息可能不准确。
偏差的大小取决于在最后一个检查点和非正常关闭之间执行的插入、更新或删除操作的次数。检查点通常每 60 秒出现一次。但是,如果 mongod
实例使用了非默认的 --syncdelay
设置,则检查点出现的次数可能会增多或减少。
在 mongod
的每个集合上运行 validate
,以在非正常关闭之后恢复统计信息。
非正常关闭后:
示例
返回所有分片数据分发指标
要返回所有分片数据分布指标,请运行以下命令:
db.aggregate([ { $shardedDataDistribution: { } } ])
示例输出:
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
返回特定分片的指标
要返回特定分片的分片数据分布指标,请运行以下命令:
db.aggregate([ { $shardedDataDistribution: { } }, { $match: { "shards.shardName": "<name of the shard>" } } ])
返回命名空间的指标
要返回命名空间的分片数据分布数据,请运行以下命令:
db.aggregate([ { $shardedDataDistribution: { } }, { $match: { "ns": "<database>.<collection>" } } ])
确认无孤立文档
从 MongoDB 6.0.3开始, 您可以使用 $shardedDataDistribution
阶段运行聚合,以确认没有剩余孤立文档:
db.aggregate([ { $shardedDataDistribution: { } }, { $match: { "ns": "<database>.<collection>" } } ])
$shardedDataDistribution
有类似如下的输出:
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
确保集群中每个分片的 "numOrphanedDocs"
为 0
。