Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$planCacheStats

項目一覧

  • 定義
  • Considerations
  • 出力
$planCacheStats

バージョン 4.2の新機能

コレクションのプラン キャッシュ情報を返します。 ステージでは、プラン キャッシュのエントリごとにドキュメントが返されます。

$planCacheStatsステージはパイプラインの最初のステージである必要があります。 ステージは空のドキュメントをパラメーターとして受け取り、次の構文を使用します。

{ $planCacheStats: { } }

注意

4.4 の変更

バージョン 4.4 以降、

  • $planCacheStatsステージはmongosインスタンスとmongodインスタンスでも実行できます。 4の 。 2 、 $planCacheStatsステージはmongodインスタンスでのみ実行できます。

  • $planCacheStatsには新しいフィールドが含まれます。ホストフィールドと、 mongosに対して実行した場合は、シャードフィールドが含まれます。

  • mongoshell は、PlanCache.list() 集計ステージのラッパーとしてメソッド$planCacheStats を提供します。

  • MongoDB は以下を削除します。

    • planCacheListPlans およびplanCacheListQueryShapesコマンドと

    • PlanCache.getPlansByQuery() およびPlanCache.listQueryShapes()メソッド。

    代わりに$planCacheStatsまたはPlanCache.list()を使用してください。

Tip

以下も参照してください。

$planCacheStats は、集計パイプラインの最初のステージである必要があります。

authorizationで実行されているシステムでは、ユーザーはコレクションに対するplanCacheRead特権を持っている必要があります。

$planCacheStatsは、プラン キャッシュ情報を返すホストを選択する際の読み込み設定( read preference )を観察します。

アプリケーションは、レプリカセットの異なるノードを対象とする場合があります。 そのため、各レプリカセット ノードは異なる読み取りコマンドを受け取り、他のノードとは異なるプラン キャッシュ情報を持っている可能性があります。 ただし、レプリカセットまたはシャーディングされたクラスターで$planCacheStatsを実行すると、通常の読み込み設定(read preference)ルールに従います。 つまり、レプリカセットでは、この操作はレプリカセットの 1 つのメンバーのみからプラン キャッシュ情報を収集し、シャーディングされたクラスターでは、この操作は各シャード レプリカセットの 1 つのメンバーのみからプラン キャッシュ情報を収集します。

各プラン キャッシュ エントリごとに、 $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
}

各ドキュメントには、次のようなさまざまなクエリプランと実行に関する統計が含まれています。

フィールド
説明

このキャッシュ エントリを生成した特定のクエリを含むドキュメントすなわち

{
"query" : <document>,
"sort" : <document>,
"projection" : <document>
}
isActive

エントリがアクティブか非アクティブかを示すブール値。

  • アクティブな場合、クエリ プランナーは現在 エントリを使用してクエリプランを生成しています。

  • 非アクティブの場合、クエリ プランナーは現在、クエリプランを生成するためにエントリを使用していません。

Tip

以下も参照してください。

クエリシェイプのハッシュを表す 16進数の string です。 詳細については、 explain.queryPlanner.queryHashを参照してください

このクエリに関連付けられているプラン キャッシュ エントリを見つけるために使用されるキーのハッシュを表す 16 進数の string です。 プラン キャッシュ キーは、クエリシェイプとそのシェイプで現在使用可能なインデックスの両方の関数です。 詳しくは、以下を参照してください explain.queryPlanner.planCacheKey

キャッシュされたプランの詳細。 詳しくはexplain.queryPlannerを参照してください。

works
クエリ プランナーが候補プランを評価する試用期間中にクエリ実行プランによって実行された「ワーク ユニット」の数。 詳しくは、以下を参照してください explain.executionStats.executionStages.works
timeOfCreation
エントリの作成時刻。

実行統計ドキュメントの配列。 配列には、候補プランごとに のドキュメントが含まれています。

実行統計の詳細については、 explain.executionStatsを参照してください。

creationExecStats配列にリストされている候補プランのスコアの配列。

indexFilterSet
クエリシェイプにインデックス フィルターが存在するかどうかを示すブール値。
estimatedSizeBytes

プラン キャッシュ エントリの推定サイズをバイト単位で説明する数値。

バージョン 5.0 で追加

MongoDB 5.0、4.4.3、および 4.2.12 以降では、このフィールドは使用できます。

プラン キャッシュ情報が返されたmongodインスタンスのホスト名とポート。

シャーディングされたクラスターで実行すると、操作は各シャード レプリカセット内の 1 つのノードからのプラン キャッシュ エントリ情報を返します。 このメンバーは、シャードフィールドとホストフィールドによって識別されます。 「読み込み設定 (read preference) 」も参照してください。

バージョン 4.4 で追加

$planCacheStatsがキャッシュ エントリを取得したシャードの名前。

シャーディングされたクラスターで実行した場合にのみ使用できます。

バージョン 4.4 で追加

このセクションの例では、次の 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" }
] )

コレクションに次のインデックスを作成します。

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")} } }
);

注意

インデックス{ item: 1, price: 1 }部分インデックスであり、 priceフィールドがNumberDecimal("10")以上のドキュメントのみをインデックス化します。

コレクションに対していくつかのクエリを実行します。

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" } )

次の集計パイプラインは$planCacheStatsを使用して、コレクションのプラン キャッシュ エントリに関する情報を返します。

db.orders.aggregate( [
{ $planCacheStats: { } }
] )

この操作は、キャッシュ内のすべてのエントリを返します。

{ // 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
}

planCacheKey も参照してください。

MongoDB 4.4 では、非推奨のplanCacheListQueryShapesコマンドとそのヘルパー メソッドPlanCache.listQueryShapes()が削除されます。

あるいは、 $planCacheStatsステージを使用して、キャッシュされたプランがあるすべてのクエリシェイプのリストを取得することもできます。

たとえば、次の例では$projectステージを使用してcreatedFromQueryフィールドとqueryHashフィールドのみを出力します。

db.orders.aggregate( [ { $planCacheStats: { } } , { $project: {createdFromQuery: 1, queryHash: 1 } } ] )

この操作では、次のクエリシェイプが返されます。

{ "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" }

特定のクエリシェイプのプラン キャッシュ情報を返すには、 $planCacheStatsステージの後にplanCacheKeyフィールドの$matchが続くようにします。

次の集計パイプラインでは、 $planCacheStatsに続く$match$projectを使用して、特定のクエリシェイプの特定の情報を返します。

db.orders.aggregate( [
{ $planCacheStats: { } },
{ $match: { planCacheKey: "DD67E353"} }
] )

この操作では、以下を返します。

{
"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
}

planCacheKeyqueryHashも参照してください。

戻る

$out