checkMetadataConsistency
定义
checkMetadataConsistency
对集群、数据库或集合的分片元数据执行一系列一致性检查。 该命令返回一个游标,其中包含找到的全部或批处理 不一致结果。
提示
在
mongosh
中,该命令也运行通过db.checkMetadataConsistency()
、db.collection.checkMetadataConsistency()
或sh.checkMetadataConsistency()
辅助方法运行。辅助方法对
mongosh
用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。在主要维护操作(例如升级和降级)后运行此命令,以检查目录的状态。
默认情况下,该命令不会检查索引在分片之间的一致性。 要检查索引,请设置
checkIndexes
选项。7.0 版本中的新增功能。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
要检查整个集群的分片元数据不一致情况,请从
admin
数据库运行命令。db.adminCommand( { checkMetadataConsistency: 1 } ) 要检查数据库是否存在分片元数据不一致的情况,请从数据库上下文中运行以下命令:
use cars db.runCommand( { checkMetadataConsistency: 1 } ) 要检查集合的分片元数据是否不一致,请使用集合名称运行命令:
use library db.runCommand( { checkMetadataConsistency: "authors", } )
命令字段
字段 | 类型 | 说明 |
---|---|---|
checkMetadataConsistency | 整数或字符串 | 指定要检查的集合。
|
checkIndexes | 布尔 | 设置该命令是否还检查分片元数据中的索引。 有关详细信息,请参阅检查索引。 |
cursor | 文档 | 配置返回游标。 |
cursor.batchSize | 整型 | 每个批次中包含的不一致结果的最大数量。 |
输出
对于在分片元数据中发现的每个不一致,checkMetadataConsistency
命令会返回一个带有文档的游标。要学习;了解更多信息,请参阅不一致类型。
返回文档包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
cursor | 文档 | 带有不一致检查结果的游标。 |
cursor.id | 整型 | 一个 64 位整数表示游标 ID。 使用 如果游标返回的 ID 为 |
cursor.ns | 字符串 | 已检查数据库和collection是否存在不一致。 |
cursor.firstBatch | 阵列 | 元数据一致性检查的结果。 |
ok | 布尔 | 指示命令是否成功。 |
行为
批处理结果
checkMetadataConsistency
命令分批返回结果。 要自定义批处理大小, batchSize
选项:
var cur = db.runCommand( { checkMetadataConsistency: 1, cursor: { batchSize: 10 } } )
如果cursor.id
字段大于 0,则可以与getMore
命令一起使用来检索下一批处理结果。
检查索引
默认情况下, checkMetadataConsistency
命令不检查索引。 要检查元数据一致性和索引,请使用checkIndexes
选项:
db.runCommand( { checkMetadataConsistency: 1, checkIndexes: true } )
例子
使用runCommand()
运行checkMetadataConsistency
命令:
db.runCommand( { checkMetadataConsistency: 1 } )
示例输出:
{ cursor: { id: Long("0"), ns: "test.$cmd.aggregate", firstBatch: [ { type: "MisplacedCollection", description: "Unsharded collection found on shard different from database primary shard", details: { namespace: "test.authors", shard: "shard02", localUUID: new UUID("1ad56770-61e2-48e9-83c6-8ecefe73cfc4") } } ], }, ok: 1 }