$planCacheStats
On this page
Definition定义
$planCacheStats
New in version 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: { } }
Note4.4 Changes
Starting in version 4.4,从版本4.4开始,-
$planCacheStats
stage can be run onmongos
instances as well as onmongod
instances.$planCacheStats
阶段可以在mongos
实例和mongod
实例上运行。In 4.2,在4.2中,$planCacheStats
stage can only run onmongod
instances.$planCacheStats
阶段只能在mongod
实例上运行。 -
$planCacheStats
includes new fields: the host field and, when run against a包括新的字段:mongos
, the shard field.host
字段,当对mongos
运行时,shard
字段。 -
mongo
shell provides the methodPlanCache.list()
as a wrapper for$planCacheStats
aggregation stage.mongo
shell提供方法PlanCache.list()
作为$planCacheStats
聚合阶段的包装器。 -
MongoDB removes the following:MongoDB删除了以下内容:-
planCacheListPlans
and和planCacheListQueryShapes
commands, and命令,以及 -
PlanCache.getPlansByQuery()
and和PlanCache.listQueryShapes()
methods.方法。
Use请改用$planCacheStats
orPlanCache.list()
instead.$planCacheStats
或PlanCache.list()
。 -
-
See also: 另请参阅:
Considerations注意事项
Pipeline管道
$planCacheStats
must be the first stage in an aggregation pipeline.必须是聚合管道中的第一个阶段。
Restrictions限制
-
$planCacheStats
is not allowed in:不允许出现在:-
$facet
aggregation stage聚合阶段
-
$planCacheStats
requires read concern level需要读取关注级别"local"
."local"
。
Access Control访问控制
On systems running with 在使用授权运行的系统上,用户必须具有集合的authorization
, the user must have the planCacheRead
privilege for the collection.authorization
权限。
Read Preference读取首选项
$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.也就是说,在副本集中,该操作仅从副本集中的一个成员集合计划缓存信息,而在分片集群中,该操作从每个分片副本集中的仅一个成员中集合计划高速缓存信息。
Output输出
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
"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 | { |
isActive |
Tip
|
queryHash | explain.queryPlanner.queryHash explain.queryPlanner.queryHash 。 |
planCacheKey | explain.queryPlanner.planCacheKey explain.queryPlanner.planCacheKey |
cachedPlan | explain.queryPlanner . explain.queryPlanner 。 |
works | explain.executionStats.executionStages.works |
timeOfCreation | |
creationExecStats | explain.executionStats . explain.executionStats 。 |
candidatePlanScores | creationExecStats array. creationExecStats 数组中列出的候选计划的分数数组。 |
indexFilterSet | |
estimatedSizeBytes | New in version 5.0. |
host | mongod instance from which the plan cache information was returned.mongod 实例的主机名和端口。shard 和host 字段标识。另请参阅读取首选项。 New in version 4.4. |
shard | $planCacheStats retrieved the cache entry.$planCacheStats 从中检索缓存项的分片的名称。New in version 4.4. |
Examples实例
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" } )
Return Information for All Entries in the Query Cache返回查询缓存中所有条目的信息
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
"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
"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
"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
"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
。
List Query Shapes列出查询形状
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" }
Find Cache Entry Details for a Query Shape查找查询形状的缓存项详细信息
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
"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
。