validate
在本页面
Definition
validate
- validate命令检查集合的数据并为索引构建正确性并返回结果。
该命令具有以下语法:
db.runCommand( {
validate: <string>, // Collection name
full: <boolean> // Optional
} )
该命令包含以下字段:
Field | Type | Description |
---|---|---|
validate |
string | 要验证的集合的名称。 |
full |
boolean | 可选的 。一个标志,确定命令是执行较慢但更彻底的检查还是执行较快但次要的检查。 |
如果是true
,请执行更彻底的检查。
如果是false
,则省略一些检查,以进行较快但较不彻底的检查。
默认为false
在版本 3.6 中更改。
从 MongoDB 3.6 开始,对于 WiredTiger 存储引擎,只有full
验证过程将强制检查点并将所有内存中数据刷新到磁盘,然后再验证磁盘上的数据。
在以前的版本中,WT 存储引擎的数据验证过程始终强制使用检查点。
mongo shell 还提供了一个包装器db.collection.validate():
db.collection.validate();
Behavior
validate命令的速度可能很慢,尤其是在较大的数据集上。
validate命令在集合上获得独占锁W
。这将阻止对集合的所有读取和写入,直到操作完成。在辅助节点上运行时,validate操作可以阻止该辅助节点上的所有其他操作,直到完成为止。
Note
由于validate扫描数据结构的方式,即使完全收集验证也无法检测到 MMAPv1 存储引擎数据文件上的所有损坏形式。
Examples
- 使用默认设置(即
full: false
)验证集合myCollection
db.runCommand( { validate: "myCollection" } )
- 对集合
myCollection
进行完全验证
db.runCommand( { validate: "myCollection", full: true } )
Validate Output
validate会根据您使用的storage engine产生不同的输出。指定{validate: "<collName>", full: true }
以获得更详细的输出。
MMAPv1和WiredTiger存储引擎共有以下字段:
-
validate.
ns
- 集合的完整名称空间名称。命名空间包括数据库名称和格式为
database.collection
的集合名称。
- 集合的完整名称空间名称。命名空间包括数据库名称和格式为
-
validate.
nrecords
- 集合中的documents数。
-
validate.
nIndexes
- 集合上的索引数。
-
validate.
keysPerIndex
- 包含集合中每个索引的名称和索引条目计数的文档。
"keysPerIndex" : {
"_id_" : <num>,
"<index2_name>" : <num>,
...
}
从 3.6.13 开始,keysPerIndex仅通过索引名称标识索引。 MongoDB 的早期版本显示索引的完整名称空间。即<db>.<collection>.$<index_name>
validate.
indexDetails
- 包含每个索引的索引验证状态的文档。
"indexDetails" : {
"_id_" : {
"valid" : <boolean>
},
"<index2_name>" : {
"valid" : <boolean>
},
...
}
从 3.6.13 开始,
-
indexDetails标识无效的特定索引。如果任何索引无效,则早期版本的 MongoDB 会将所有索引标记为无效。
-
indexDetails仅通过索引名称标识索引。 MongoDB 的早期版本显示索引的完整名称空间。即
<db>.<collection>.$<index_name>
。 -
validate.
valid
-
validate.
errors
- 如果集合无效(即valid为 false),则此字段将包含描述验证错误的消息。
-
validate.
extraIndexEntries
- 一个数组,其中包含指向指向集合中不存在的文档的每个索引条目的信息。
"extraIndexEntries" : [
{
"indexName" : <string>,
"recordId" : <NumberLong>, // for the non-existent document
"indexKey" : {
"<key1>" : <value>,
...
}
}
...
]
Note
对于extraIndexEntries数组,所有indexKey
字段大小的总和限制为 1MB,其中大小包括indexKey
的键和值。如果总和超过此大小,警告字段将显示一条消息。
从 MongoDB 3.6.13 开始可用
validate.
missingIndexEntries
- 一个数组,其中包含缺少相应索引条目的每个文档的信息。
"missingIndexEntries" : [
{
"indexName" : <string>,
"recordId" : <NumberLong>,
"idKey" : <_id key value>, // The _id value of the document. Only present if an ``_id`` index exists.
"indexKey" : { // The missing index entry
"<key1>" : <value>,
...
}
}
...
]
Note
对于missingIndexEntries数组,idKey
字段大小及其所有indexKey
字段大小的总和限制为 1MB,其中字段大小包括idKey
和indexKey
的键和值。如果总和超过此大小,警告字段将显示一条消息。
从 MongoDB 3.6.13 开始可用
validate.
ok
- 命令执行成功后,值为
1
的整数。如果命令失败,则ok字段的值为0
。
- 命令执行成功后,值为
以下字段特定于MMAPv1:
-
validate.
firstExtent
- 集合中第一个扩展区的磁盘位置。该字段的值还包括名称空间。
-
validate.
lastExtent
- 集合中最后一个扩展区的磁盘位置。该字段的值还包括名称空间。
-
validate.
extentCount
- 集合中的扩展区数。
-
validate.
extents
- validate针对集合中的每个范围返回此文档的一个实例。仅当您为命令指定
full
选项时,才会返回此嵌入式文档。
- validate针对集合中的每个范围返回此文档的一个实例。仅当您为命令指定
-
validate.extents.
loc
- 此扩展区开头的磁盘位置。
-
validate.extents.
xnext
- 此范围之后的盘区位置。如果这是扩展区的链接列表的末尾,则为“ null”。
-
validate.extents.
xprev
- 此盘区之前的盘区的磁盘位置。如果这是范围的链接列表的开头,则为“ null”。
-
validate.extents.
nsdiag
- 此扩展区所属的名称空间(应与验证列表开头显示的名称空间相同)。
-
validate.extents.
size
- 在此范围内的字节数。
-
validate.extents.
firstRecord
- 第一个记录在此范围内的磁盘位置。
-
validate.extents.
lastRecord
- 此范围中最后一条记录的磁盘位置。
-
validate.
datasize
-
validate.
lastExtentSize
- 在此集合中创建的最后一个新扩展区的大小。此值确定所创建的* next *范围的大小。
-
validate.
padding
- 1 到 2 之间的浮点值。
MongoDB 创建新记录时,它将使用padding factor确定要添加到记录的额外空间。当 mongo 注意到更新操作正在触发记录移动时,填充因子将由 mongo 自动调整。
-
validate.
firstExtentDetails
- 在此集合中创建的第一个扩展区的大小。此数据类似于extents嵌入式文档提供的数据;但是,数据仅反映集合中的第一个范围,并且始终返回。
-
validate.firstExtentDetails.
loc
- 此扩展区开头的磁盘位置。
-
validate.firstExtentDetails.
xnext
- 此范围之后的盘区位置。如果这是扩展区的链接列表的末尾,则为“ null”,只有在只有一个扩展区的情况下才应该是这种情况。
-
validate.firstExtentDetails.
xprev
- 此盘区之前的盘区的磁盘位置。此值应始终为“ null”。
-
validate.firstExtentDetails.
nsdiag
- 此扩展区所属的名称空间(应与验证列表开头显示的名称空间相同)。
-
validate.firstExtentDetails.
size
- 在此范围内的字节数。
-
validate.firstExtentDetails.
firstRecord
- 第一个记录在此范围内的磁盘位置。
-
validate.firstExtentDetails.
lastRecord
- 此范围中最后一条记录的磁盘位置。
-
validate.
objectsFound
- 集合扫描中实际遇到的记录数。此字段应与nrecords字段具有相同的值。
-
validate.
invalidObjects
- 包含未通过验证检查的 BSON 文档的记录数。
Note
仅当您指定full
选项时,此字段才包括在验证输出中。
validate.
bytesWithHeaders
- 除了bytesWithHeaders包含记录头之外,这与 datasize 相似。在 2.0 版中,记录标题为每个文档 16 个字节。
Note
仅当您指定full
选项时,此字段才包括在验证输出中。
validate.
bytesWithoutHeaders
- bytesWithoutHeaders返回从所有记录的扫描收集的数据。该值应与datasize相同。
Note
仅当您指定full
选项时,此字段才包括在验证输出中。
-
validate.
deletedCount
- 集合中已删除或“免费”记录的数量。
-
validate.
deletedSize
- 集合中所有已删除或“免费”记录的大小。