On this page本页内容
$planCacheStats
New in version 4.2.在版本4.2中新增。
Returns plan cache information for a collection. 返回集合的计划缓存信息。The stage returns a document for each plan cache entry.该阶段为每个计划缓存条目返回一个文档。
The $planCacheStats
stage must be the first stage in the pipeline. $planCacheStats
阶段必须是管道中的第一个阶段。The stage takes an empty document as a parameter and has the following syntax:阶段取用一个空文档作为参数,语法如下:
{ $planCacheStats: { } }
Starting in version 4.4,从版本4.4开始,
$planCacheStats
stage can be run on mongos
instances as well as on mongod
instances. $planCacheStats
阶段可以在mongos
实例和mongod
实例上运行。$planCacheStats
stage can only run on mongod
instances.$planCacheStats
阶段只能在mongod
实例上运行。$planCacheStats
mongos
, the shard field.host
字段,以及在mongos
上运行时,shard
字段。mongo
shell provides the method PlanCache.list()
as a wrapper for $planCacheStats
aggregation stage.mongo
shell提供方法PlanCache.list()
作为$planCacheStats
聚合阶段的包装。MongoDB removes the following:MongoDB删除了以下内容:
planCacheListPlans
planCacheListQueryShapes
PlanCache.getPlansByQuery()
PlanCache.listQueryShapes()
Use 请改用$planCacheStats
or PlanCache.list()
instead.$planCacheStats
或PlanCache.list()
。
$planCacheStats
must be the first stage in an aggregation pipeline.必须是聚合管道中的第一阶段。
$planCacheStats
is not allowed in:在以下情况下不允许:
$facet
$planCacheStats
"local"
."local"
。On systems running with 在使用authorization
, the user must have the planCacheRead
privilege for the collection.authorization
运行的系统上,用户必须具有集合的planCacheRead
权限。
$planCacheStats
observes the read preference in selecting the host(s) from which to return the plan cache information.在选择要从中返回计划缓存信息的主机时观察读取首选项。
Applications may target different members of a replica set. 应用程序可以针对复制集的不同成员。As such, each replica set member might receive different read commands and have plan cache information that differs from other members. 因此,每个副本集成员可能接收不同的读取命令,并且具有不同于其他成员的计划缓存信息。Nevertheless, running 尽管如此,在副本集或分片集群上运行$planCacheStats
on a replica set or a sharded cluster obeys the normal read preference rules. $planCacheStats
符合正常的读取首选项规则。That is, on a replica set, the operation gathers plan cache information from just one member of replica set, and on a sharded cluster, the operation gathers plan cache information from just one member of each shard replica set.也就是说,在复制集上,该操作仅从复制集的一个成员集合计划缓存信息,而在分片集群上,操作仅从每个分片复制集的成员集合计划高速缓存信息。
For each plan cache entry, the 对于每个计划缓存条目,$planCacheStats
stage returns a document similar to the following:$planCacheStats
阶段将返回一个类似于以下内容的文档:
{ "createdFromQuery" : <document>, "queryHash" : <hexadecimal string>, "planCacheKey" : <hexadecimal string>, "isActive" : <boolean>, "works" : <NumberLong>, "cachedPlan" : { "stage" : <STAGE1>, "filter" : <document>, "inputStage" : { "stage" : <STAGE2>, ... } }, "timeOfCreation" : <date>, "creationExecStats" : [ // Exec Stats Document for each candidate plan { "nReturned" : <num>, "executionTimeMillisEstimate" : <num> "totalKeysExamined" : <num> "totalDocsExamined" :<num> "executionStages" : { "stage" : <STAGE A>, ... "inputStage" : { "stage" : <STAGE B>, ... } } }, ... ], "candidatePlanScores" : [ <number>, ... ], "indexFilterSet" : <boolean>, "estimatedSizeBytes" : <num>, // Available starting in MongoDB 5.0, 4.4.3, 4.2.12, 4.0.23, 3.6.23 "host" : <string>, // Available starting in MongoDB 4.4 "shard" : <string> // Available starting in MongoDB 4.4 if run on sharded cluster }
Each document includes various query plan and execution stats, including:每个文档包括各种查询计划和执行统计,包括:
createdFromQuery |
{ "query" : <document>, "sort" : <document>, "projection" : <document> } |
isActive |
|
queryHash |
|
planCacheKey |
|
cachedPlan |
|
works | explain.executionStats.executionStages.works
|
timeOfCreation | |
creationExecStats |
|
candidatePlanScores |
|
indexFilterSet | |
estimatedSizeBytes |
|
host |
|
shard |
|
The examples in this section use the following 本节中的示例使用以下orders
collection:orders
集合:
db.orders.insertMany( [ { "_id" : 1, "item" : "abc", "price" : NumberDecimal("12"), "quantity" : 2, "type": "apparel" }, { "_id" : 2, "item" : "jkl", "price" : NumberDecimal("20"), "quantity" : 1, "type": "electronics" }, { "_id" : 3, "item" : "abc", "price" : NumberDecimal("10"), "quantity" : 5, "type": "apparel" }, { "_id" : 4, "item" : "abc", "price" : NumberDecimal("8"), "quantity" : 10, "type": "apparel" }, { "_id" : 5, "item" : "jkl", "price" : NumberDecimal("15"), "quantity" : 15, "type": "electronics" } ] )
Create the following indexes on the collection:在集合上创建以下索引:
db.orders.createIndex( { item: 1 } ); db.orders.createIndex( { item: 1, quantity: 1 } ); db.orders.createIndex( { quantity: 1 } ); db.orders.createIndex( { quantity: 1, type: 1 } ); db.orders.createIndex( { item: 1, price: 1 }, { partialFilterExpression: { price: { $gte: NumberDecimal("10")} } } );
Index 索引{ item: 1, price: 1 }
is a partial index and only indexes documents with price
field greater than or equal to NumberDecimal("10")
.{ item: 1, price: 1 }
是部分索引,仅对price
字段大于或等于NumberDecimal("10")
的文档进行索引。
Run some queries against the collection:对集合运行一些查询:
db.orders.find( { item: "abc", price: { $gte: NumberDecimal("10") } } ) db.orders.find( { item: "abc", price: { $gte: NumberDecimal("5") } } ) db.orders.find( { quantity: { $gte: 20 } } ) db.orders.find( { quantity: { $gte: 5 }, type: "apparel" } )
The following aggregation pipeline uses 以下聚合管道使用$planCacheStats
to return information on the plan cache entries for the collection:$planCacheStats
返回集合的计划缓存项的信息:
db.orders.aggregate( [
{ $planCacheStats: { } }
] )
The operation returns all entries in the cache:该操作返回缓存中的所有条目:
{ // Plan Cache Entry 1 "createdFromQuery" : { "query" : { "quantity" : { "$gte" : 5 }, "type" : "apparel" }, "sort" : { }, "projection" : { } }, "queryHash" : "4D151C4C", "planCacheKey" : "DD67E353", "isActive" : false, "works" : NumberLong(4), "cachedPlan" : { ... }, "timeOfCreation" : ISODate("2020-02-06T18:15:44.849Z"), "creationExecStats" : [ { ... // Exec Stats for Candidate 1 }, { ... // Exec Stats for Candidate 2 } ], "candidatePlanScores" : [ 1.5002, 1.5002 ], "indexFilterSet" : false, "estimatedSizeBytes" : NumberLong(3160), // Available starting in MongoDB 5.0, 4.4.3, 4.2.12, 4.0.23, 3.6.23 "host" : "mongodb1.example.net:27018", // Available starting in MongoDB 4.4 "shard" : "shardA" // Available starting in MongoDB 4.4 if run on sharded cluster } { // Plan Cache Entry 2 "createdFromQuery" : { "query" : { "quantity" : { "$gte" : 20 } }, "sort" : { }, "projection" : { } }, "queryHash" : "23B19B75", "planCacheKey" : "6F23F858", "isActive" : false, "works" : NumberLong(1), "cachedPlan" : { ... }, "timeOfCreation" : ISODate("2020-02-06T18:15:44.454Z"), "creationExecStats" : [ { ... // Exec Stats for Candidate 1 }, { ... // Exec Stats for Candidate 2 } ], "candidatePlanScores" : [ 1.0002, 1.0002 ], "indexFilterSet" : false, "estimatedSizeBytes" : NumberLong(2539), // Available starting in MongoDB 5.0, 4.4.3, 4.2.12, 4.0.23, 3.6.23 "host" : "mongodb1.example.net:27018", // Available starting in MongoDB 4.4 "shard" : "shardA" // Available starting in MongoDB 4.4 if run on sharded cluster } { // Plan Cache Entry 3 "createdFromQuery" : { "query" : { "item" : "abc", "price" : { "$gte" : NumberDecimal("5") } }, "sort" : { }, "projection" : { } }, "queryHash" : "117A6B10", "planCacheKey" : "A1824628", "isActive" : true, "works" : NumberLong(4), "cachedPlan" : { ... }, "timeOfCreation" : ISODate("2020-02-06T18:15:44.452Z"), "creationExecStats" : [ { ... // Exec Stats for Candidate 1 }, { ... // Exec Stats for Candidate 2 } ], "candidatePlanScores" : [ 1.7502, 1.7502 ], "indexFilterSet" : false, "estimatedSizeBytes" : NumberLong(3183), // Available starting in MongoDB 5.0, 4.4.3, 4.2.12, 4.0.23, 3.6.23 "host" : "mongodb1.example.net:27018", // Available starting in MongoDB 4.4 "shard" : "shardA" // Available starting in MongoDB 4.4 if run on sharded cluster } { // Plan Cache Entry 4 "createdFromQuery" : { "query" : { "item" : "abc", "price" : { "$gte" : NumberDecimal("10") } }, "sort" : { }, "projection" : { } }, "queryHash" : "117A6B10", "planCacheKey" : "2E6E536B", "isActive" : true, "works" : NumberLong(3), "cachedPlan" : { ... }, "timeOfCreation" : ISODate("2020-02-06T18:15:44.449Z"), "creationExecStats" : [ { ... // Exec Stats for Candidate 1 }, { ... // Exec Stats for Candidate 2 }, { ... // Exec Stats for Candidate 3 } ], "candidatePlanScores" : [ 1.6668666666666665, 1.6668666666666665, 1.6668666666666665 ], "indexFilterSet" : false, "estimatedSizeBytes" : NumberLong(4653), // Available starting in MongoDB 5.0, 4.4.3, 4.2.12, 4.0.23, 3.6.23 "host" : "mongodb1.example.net:27018", // Available starting in MongoDB 4.4 "shard" : "shardA" // Available starting in MongoDB 4.4 if run on sharded cluster }
See also 另请参见planCacheKey
.planCacheKey
。
MongoDB 4.4 removes the deprecated MongoDB 4.4删除了不推荐使用的planCacheListQueryShapes
command and its helper method PlanCache.listQueryShapes()
.planCacheListQueryShapes
命令及其助手方法PlanCache.listQueryShapes()
。
As an alternative, you can use the 或者,您可以使用$planCacheStats
stage to obtain a list of all of the query shapes for which there is a cached plan.$planCacheStats
阶段来获取存在缓存计划的所有查询形状的列表。
For example, the following uses the 例如,下面使用$project
stage to only output the createdFromQuery
field and the queryHash
field.$project
阶段仅输出createdFromQuery
字段和queryHash
字段。
db.orders.aggregate( [ { $planCacheStats: { } } , { $project: {createdFromQuery: 1, queryHash: 1 } } ] )
The operation returns the following query shapes:该操作返回以下查询形状:
{ "createdFromQuery" : { "query" : { "item" : "abc", "price" : { "$gte" : NumberDecimal("5") } }, "sort" : { }, "projection" : { } }, "queryHash" : "117A6B10" } { "createdFromQuery" : { "query" : { "quantity" : { "$gte" : 5 }, "type" : "apparel" }, "sort" : { }, "projection" : { } }, "queryHash" : "4D151C4C" } { "createdFromQuery" : { "query" : { "quantity" : { "$gte" : 20 } }, "sort" : { }, "projection" : { } }, "queryHash" : "23B19B75" } { "createdFromQuery" : { "query" : { "item" : "abc", "price" : { "$gte" : NumberDecimal("10") } }, "sort" : { }, "projection" : { } }, "queryHash" : "117A6B10" }
To return plan cache information for a particular query shape, the 若要返回特定查询形状的计划缓存信息,$planCacheStats
stage can be followed by a $match
on the planCacheKey
field.$planCacheStats
阶段之后可以在planCacheKey
字段上添加$match
。
The following aggregation pipeline uses 以下聚合管道使用$planCacheStats
followed by a $match
and $project
to return specific information for a particular query shape:$planCacheStats
后跟$match
和$project
来返回特定查询形状的特定信息:
db.orders.aggregate( [ { $planCacheStats: { } }, { $match: { planCacheKey: "DD67E353"} } ] )
The operation returns the following:运算结果如下:
{ "createdFromQuery" : { "query" : { "quantity" : { "$gte" : 5 }, "type" : "apparel" }, "sort" : { }, "projection" : { } }, "queryHash" : "4D151C4C", "planCacheKey" : "DD67E353", "isActive" : false, "works" : NumberLong(4), "cachedPlan" : { "stage" : "FETCH", "filter" : { "type" : { "$eq" : "apparel" } }, "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "quantity" : 1 }, "indexName" : "quantity_1", "isMultiKey" : false, "multiKeyPaths" : { "quantity" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "quantity" : [ "[5.0, inf.0]" ] } } }, "timeOfCreation" : ISODate("2020-02-06T18:15:44.849Z"), "creationExecStats" : [ { "nReturned" : 2, "executionTimeMillisEstimate" : 0, "totalKeysExamined" : 3, "totalDocsExamined" : 3, "executionStages" : { "stage" : "FETCH", "filter" : { "type" : { "$eq" : "apparel" } }, "nReturned" : 2, "executionTimeMillisEstimate" : 0, "works" : 4, "advanced" : 2, "needTime" : 1, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "docsExamined" : 3, "alreadyHasObj" : 0, "inputStage" : { "stage" : "IXSCAN", "nReturned" : 3, "executionTimeMillisEstimate" : 0, "works" : 4, "advanced" : 3, "needTime" : 0, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "keyPattern" : { "quantity" : 1 }, "indexName" : "quantity_1", "isMultiKey" : false, "multiKeyPaths" : { "quantity" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "quantity" : [ "[5.0, inf.0]" ] }, "keysExamined" : 3, "seeks" : 1, "dupsTested" : 0, "dupsDropped" : 0 } } }, { "nReturned" : 2, "executionTimeMillisEstimate" : 0, "totalKeysExamined" : 3, "totalDocsExamined" : 2, "executionStages" : { "stage" : "FETCH", "nReturned" : 2, "executionTimeMillisEstimate" : 0, "works" : 4, "advanced" : 2, "needTime" : 1, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "docsExamined" : 2, "alreadyHasObj" : 0, "inputStage" : { "stage" : "IXSCAN", "nReturned" : 2, "executionTimeMillisEstimate" : 0, "works" : 4, "advanced" : 2, "needTime" : 1, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "keyPattern" : { "quantity" : 1, "type" : 1 }, "indexName" : "quantity_1_type_1", "isMultiKey" : false, "multiKeyPaths" : { "quantity" : [ ], "type" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "quantity" : [ "[5.0, inf.0]" ], "type" : [ "[\"apparel\", \"apparel\"]" ] }, "keysExamined" : 3, "seeks" : 2, "dupsTested" : 0, "dupsDropped" : 0 } } } ], "candidatePlanScores" : [ 1.5002, 1.5002 ], "indexFilterSet" : false, "estimatedSizeBytes" : NumberLong(3160), // Available starting in MongoDB 5.0, 4.4.3, 4.2.12, 4.0.23, 3.6.23 "host" : "mongodb1.example.net:27018", // Available starting in MongoDB 4.4 "shard" : "shardA" // Available starting in MongoDB 4.4 if run on sharded cluster }
See also 另请参见planCacheKey
and queryHash
.planCacheKey
和queryHash
。