发布于 2015-09-14 15:15:57 | 168 次阅读 | 评论: 0 | 来源: 网络整理
This document explains the output of the $explain operator and the mongo shell method explain().
The Core Explain Output fields display information for queries on non-sharded collections. For queries on sharded collections, explain() returns this information for each shard the query accesses.
{
"cursor" : "<Cursor Type and Index>",
"isMultiKey" : <boolean>,
"n" : <num>,
"nscannedObjects" : <num>,
"nscanned" : <num>,
"nscannedObjectsAllPlans" : <num>,
"nscannedAllPlans" : <num>,
"scanAndOrder" : <boolean>,
"indexOnly" : <boolean>,
"nYields" : <num>,
"nChunkSkips" : <num>,
"millis" : <num>,
"indexBounds" : { <index bounds> },
"allPlans" : [
{ "cursor" : "<Cursor Type and Index>",
"n" : <num>,
"nscannedObjects" : <num>,
"nscanned" : <num>,
"indexBounds" : { <index bounds> }
},
...
],
"oldPlan" : {
"cursor" : "<Cursor Type and Index>",
"indexBounds" : { <index bounds> }
}
"server" : "<host:port>",
}
Queries with $or operator execute each clause of the $or expression in parallel and can use separate indexes on the individual clauses. If the query uses indexes on any or all of the query’s clause, explain() contains output for each clause as well as the cumulative data for the entire query:
{
"clauses" : [
{
<core explain output>
},
{
<core explain output>
},
...
],
"n" : <num>,
"nscannedObjects" : <num>,
"nscanned" : <num>,
"nscannedObjectsAllPlans" : <num>,
"nscannedAllPlans" : <num>,
"millis" : <num>,
"server" : "<host:port>"
}
For queries on a sharded collection, the output contains the Core Explain Output for each accessed shard and cumulative shard information:
{
"clusteredType" : "<Shard Access Type>",
"shards" : {
"<shard1>" : [
{
<core explain output>
}
],
"<shard2>" : [
{
<core explain output>
}
],
...
},
"millisShardTotal" : <num>,
"millisShardAvg" : <num>,
"numQueries" : <num>,
"numShards" : <num>,
"cursor" : "<Cursor Type and Index>",
"n" : <num>,
"nChunkSkips" : <num>,
"nYields" : <num>,
"nscanned" : <num>,
"nscannedAllPlans" : <num>,
"nscannedObjects" : <num>,
"nscannedObjectsAllPlans" : <num>,
"millis" : <num>
}
cursor is a string that reports the type of cursor used by the query operation:
isMultiKey is a boolean. When true, the query uses a multikey index, where one of the fields in the index holds an array.
n is a number that reflects the number of documents that match the query selection criteria.
Specifies the total number of documents scanned during the query. The nscannedObjects may be lower than nscanned, such as if the index covers a query. See indexOnly. Additionally, the nscannedObjects may be lower than nscanned in the case of multikey index on an array field with duplicate documents.
Specifies the total number of documents or index entries scanned during the database operation. You want n and nscanned to be close in value as possible. The nscanned value may be higher than the nscannedObjects value, such as if the index covers a query. See indexOnly.
2.2 新版功能.
nscannedObjectsAllPlans is a number that reflects the total number of documents scanned for all query plans during the database operation.
2.2 新版功能.
nscannedAllPlans is a number that reflects the total number of documents or index entries scanned for all query plans during the database operation.
2.2 新版功能.
scanAndOrder is a boolean that is true when the query cannot use the index for returning sorted results.
When true, MongoDB must sort the documents after it retrieves them from either an index cursor or a cursor that scans the entire collection.
indexOnly is a boolean value that returns true when the the query is covered by the index indicated in the cursor field. When an index covers a query, MongoDB can both match the query conditions and return the results using only the index because:
nYields is a number that reflects the number of times this query yielded the read lock to allow waiting writes execute.
nChunkSkips is a number that reflects the number of documents skipped because of active chunk migrations in a sharded system. Typically this will be zero. A number greater than zero is ok, but indicates a little bit of inefficiency.
indexBounds is a document that contains the lower and upper index key bounds. This field resembles one of the following:
"indexBounds" : {
"start" : { <index key1> : <value>, ... },
"end" : { <index key1> : <value>, ... }
},
"indexBounds" : { "<field>" : [ [ <lower bound>, <upper bound> ] ],
...
}
allPlans is an array that holds the list of plans the query optimizer runs in order to select the index for the query. Displays only when the <verbose> parameter to explain() is true or 1.
clusteredType is a string that reports the access pattern for shards. The value is:
shards is a document value that contains the shards accessed during the query and individual Core Explain Output for each shard.
millisShardTotal is a number that reports the total time in milliseconds for the query to run on the shards.
millisShardAvg is a number that reports the average time in millisecond for the query to run on each shard.
numQueries is a number that reports the total number of queries executed.