Docs Menu
Docs Home
/
データベース マニュアル
/ / / / /

低速クエリの説明

explain()メソッドは、 MongoDB が指定されたクエリをどのように計画して実行するかに関する情報を提供します。この情報は、クエリ パフォーマンスのトラブルシューティングや最適化を計画する際に役立つ場合があります。

explain()メソッドは、次のメソッドを使用するクエリで使用できます。

  • aggregate()

  • count()

このタスクは、パフォーマンスの問題を特定するために、サンプルクエリでexplain() メソッドを実行します。実際には、アプリケーションが実行するすべてのクエリでexplain() を実行するのは難しい場合があります。

アプリケーションが送信するクエリのリストを遅いもののみに絞り込むには、プロファイラーを使用できます。

プロファイラー
説明

Atlas クエリプロファイラー

Atlas のカスタマーに 散布図チャートを提供し、低速クエリやパフォーマンスの例外を簡単に特定できるようにします。

クエリ パフォーマンス情報をコレクションに保存し、特定のパフォーマンス問題を持つクエリをMongoDBに照会できます。

Atlas クエリプロファイラーとデータベースプロファイラ はどちらも、サーバーのパフォーマンスに影響を与え、ディスク領域を使用し、暗号化されたフィールドのクエリ メタメタデータを公開する可能性があります。有効にする前に、パフォーマンスとセキュリティへの影響を検討してください。

1

メソッドで評価するクエリを実行します。explain()

db.movies.explain( "executionStats").find( {
year: { $gt: 1990 },
rated: { $in: [ "PG", "PG-13" ] }
} )
2

explain.executionStats.executionTimeMillis実行時間をミリ秒単位で確認するには、 フィールドを確認します。これは、プランの実行にかかる時間に加え、クエリプランのビルドと選択にかかる時間も含む合計時間を示しています。

  • 実行時間がアプリケーションとデータベースのニーズに許容される期間内にある場合は、最適化は必要ありません。

  • 実行時間が許容範囲を超えている場合は、クエリの実行に時間がかかる理由を判断するために、さらなる分析が必要になります。

3

クエリは複数のステージで実行できます。各ステージで、 MongoDB は前のステージのドキュメントを収集して次の操作セットを実行します。explain.executionStats.executionStages は各実行ステージに関する情報を提供します。 フィールドの各レベルは、 MongoDBinputStage がステージのドキュメントを選択した方法を示します。

inputStage.stage各実行ステージの フィールドを確認します。

COLLSCAN
MongoDB がコレクションスキャンを実行したことを示します。
IXSCAN
MongoDB がインデックススキャンを実行したことを示します。
FETCH

MongoDB がデータベースから完全なドキュメントを取得したことを示します。

クエリが返すフィールドの数は少なく、アプリケーションがこのコレクションで書き込み集中型ではない場合は、クエリをカバーするために インデックス の追加を検討してください。これにより、 MongoDB はドキュメント全体を読み取るのではなく、インデックスからフィールド値を取得できます。

詳細については、「 カバード クエリ 」を参照してください。

PROJECTION
MongoDB がメモリ内のフィルタリングされたフィールドを返すことを示します。
SORT
MongoDB がメモリ内のドキュメントをソートした、 または カバードインデックスを使用したことを示します。

COLLSCAN ステージを表示するフィルタまたはソート操作を実行するクエリには、インデックスのメリットが得られます。

詳細については、「 インデックスの作成 」を参照してください。

4

インデックス付きのコレクションに対するクエリでは、インデックスが効果的に使用されない可能性があります。

検査されたキーの数と検査されたドキュメントの数を比較します。キーの数がドキュメント数より大幅に小さい場合は、インデックスが効果がなかったことを示します。

クエリの合計値を確認し、executionStats.totalDocsExaminedexecutionStats.totalKeysExamined より大きい値を表示していないことを確認します。

検査されたキーの数が検査されたドキュメントの数より大幅に少ない場合は、 フィールドの各ステージを確認し、executionStages keysExamineddocsExaminedと を比較して、どのステージがインデックスの使用に失敗したかを判断します。次に、そのステージのクエリに対応するためのインデックスを作成します。

5

フィルター を使用して結果を指定するクエリでは、問題が発生する可能性があります。非効率的なフィルターを識別するには、 フィールドの値とexecutionStats.totalDocsExamined executionStats.nReturnedフィールドの値を比較します。

  • totalDocsExamined の値が nReturned の値より大幅に大きい場合、インデックスは非効率的であることを示します。つまり、 MongoDB は結果をフィルタリングするためにコレクションをスキャンする必要がありました。

    パフォーマンスを向上させるには、フィルター フィールドにインデックスを作成します。

  • totalDocsExaminednReturned の値が同じ場合、 MongoDB は返されたドキュメントのみを検査したことを示します。これは有効なインデックスであることを示します。

戻る

結果の解釈

項目一覧