定義
- $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
Considerations
パイプライン
$planCacheStats は、集計パイプラインの最初のステージである必要があります。
制限事項
- $planCacheStatsは、次の場合は許可されません。
- $planCacheStatsには読み取り保証レベル- "local"が必要です。
アクセス制御
authorizationで実行されているシステムでは、ユーザーはコレクションに対するplanCacheRead特権を持っている必要があります。
読み込み設定 (read preference)
$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 } 
各ドキュメントには、次のようなさまざまなクエリプランと実行に関する統計が含まれています。
| フィールド | 説明 | |||||
|---|---|---|---|---|---|---|
| このキャッシュ エントリを生成した特定のクエリを含むドキュメントすなわち  | ||||||
| 
 | エントリがアクティブか非アクティブかを示すブール値。 
 | |||||
| クエリシェイプのハッシュを表す 16進数の string です。 詳細については、  | ||||||
| このクエリに関連付けられているプラン キャッシュ エントリを見つけるために使用されるキーのハッシュを表す 16 進数の string です。 プラン キャッシュ キーは、クエリシェイプとそのシェイプで現在使用可能なインデックスの両方の関数です。 詳しくは、以下を参照してください
 | ||||||
| キャッシュされたプランの詳細。 詳しくは | ||||||
| 
 | クエリ プランナーが候補プランを評価する試用期間中にクエリ実行プランによって実行された「ワーク ユニット」の数。 詳しくは、以下を参照してください
 | |||||
| 
 | エントリの作成時刻。 | |||||
| 実行統計ドキュメントの配列。 配列には、候補プランごとに のドキュメントが含まれています。 実行統計の詳細については、  | ||||||
| 
 | ||||||
| 
 | クエリシェイプにインデックス フィルターが存在するかどうかを示すブール値。 | |||||
| 
 | プラン キャッシュ エントリの推定サイズをバイト単位で説明する数値。 バージョン 5.0 で追加 MongoDB 5.0、4.4.3、および 4.2.12 以降では、このフィールドは使用できます。 | |||||
| プラン キャッシュ情報が返された シャーディングされたクラスターで実行すると、操作は各 シャードレプリカセット内の 1 つのノードからのプランキャッシュエントリ情報を返します。 このメンバーは、シャード フィールドとホスト フィールドによって識別されます。「 読み込み設定 (read preference) 」も参照してください。 バージョン 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 } 
クエリシェイプの一覧表示
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 }