$planCacheStats
定義
$planCacheStats
バージョン 4.2の新機能
コレクションのプラン キャッシュ情報を返します。 ステージでは、プラン キャッシュのエントリごとにドキュメントが返されます。
$planCacheStats
ステージはパイプラインの最初のステージである必要があります。 ステージは空のドキュメントをパラメーターとして受け取り、次の構文を使用します。{ $planCacheStats: { } } 注意
4.4 の変更
バージョン 4.4 以降、
$planCacheStats
ステージはmongos
インスタンスとmongod
インスタンスでも実行できます。 4の 。 2 、$planCacheStats
ステージはmongod
インスタンスでのみ実行できます。$planCacheStats
には新しいフィールドが含まれます。ホストフィールドと、mongos
に対して実行した場合は、シャードフィールドが含まれます。mongo
shell は、PlanCache.list()
集計ステージのラッパーとしてメソッド$planCacheStats
を提供します。MongoDB は以下を削除します。
planCacheListPlans
およびplanCacheListQueryShapes
コマンドとPlanCache.getPlansByQuery()
およびPlanCache.listQueryShapes()
メソッド。
代わりに
$planCacheStats
またはPlanCache.list()
を使用してください。
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 }
各ドキュメントには、次のようなさまざまなクエリプランと実行に関する統計が含まれています。
フィールド | 説明 | |||||
---|---|---|---|---|---|---|
このキャッシュ エントリを生成した特定のクエリを含むドキュメントすなわち
| ||||||
isActive | エントリがアクティブか非アクティブかを示すブール値。
| |||||
クエリシェイプのハッシュを表す 16進数の string です。 詳細については、 | ||||||
このクエリに関連付けられているプラン キャッシュ エントリを見つけるために使用されるキーのハッシュを表す 16 進数の string です。 プラン キャッシュ キーは、クエリシェイプとそのシェイプで現在使用可能なインデックスの両方の関数です。 詳しくは、以下を参照してください
| ||||||
キャッシュされたプランの詳細。 詳しくは | ||||||
works | クエリ プランナーが候補プランを評価する試用期間中にクエリ実行プランによって実行された「ワーク ユニット」の数。 詳しくは、以下を参照してください
explain.executionStats.executionStages.works | |||||
timeOfCreation | エントリの作成時刻。 | |||||
実行統計ドキュメントの配列。 配列には、候補プランごとに のドキュメントが含まれています。 実行統計の詳細については、 | ||||||
| ||||||
indexFilterSet | クエリシェイプにインデックス フィルターが存在するかどうかを示すブール値。 | |||||
estimatedSizeBytes | プラン キャッシュ エントリの推定サイズをバイト単位で説明する数値。 バージョン 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 }