MongoDBクエリを最適化して、アプリケーションに可能な限り最高のパフォーマンスを確保します 。これは、データの使用量と需要の変化に伴い、開発中とその後の両方で発生する可能性があります。コレクションが大きくなるにつれて、クエリのパフォーマンスを定期的に検討することで、クラスターが増やすアップまたは増やすアウトする必要があるかを判断するのに役立ちます。
動作
MongoDBにクエリを送信すると、サーバーはクエリを解釈し、データを取得する最適な方法を決定するためのクエリプランを構築し、プランを実行し、結果をクライアントに返します。
クエリのパフォーマンスを向上させるには、 MongoDB が特定のクエリのプランを構築して実行する方法を検討して、インデックスのメリットが得られるフィールド、非効率的なフィルター、増やすの問題など、問題領域を特定します。
Indexes
インデックスは、コレクションの個々のフィールドまたはフィールドのセットの値を別のデータ構造に保存します。読み取り操作では、 MongoDB はコレクション全体ではなくインデックスで検索し、関連するドキュメントを識別できます。書込み操作では、 MongoDB は変更をコレクションに書込み、インデックスを更新する必要があります。
多くの場合、インデックスを使用するとクエリが高速化されます。この改善は、どのフィールドがインデックスを作成されるか、およびクエリが フィルター にどのような使用をするかによって異なります。例、クエリがプロジェクションもフィルターも適用しない場合、コレクションスキャンはインデックススキャンよりも効率的です。
詳細については、インデックスを参照してください。
タスク
トラブルシューティング
ソリューション
詳細
Atlas クエリプロファイラー
Atlas クエリプロファイラーは、クラスターのログデータを使用して、実行速度が遅いクエリを診断およびモニターするのに役立ちます。 クエリ インサイト インターフェースを通じて、パフォーマンス統計を集計、フィルタリング、散布チャートで視覚化します。
データベースプロファイラーよりも、低速クエリやパフォーマンスアウトを特定するには、この可視化が便利な場合があります。
クエリプロファイラーを使用すると、アプリケーション負荷の動的なビューが得られます。 これにより、どのクエリが低速であるかを特定でき、そのクエリのパフォーマンスを向上させる方法について次のようなインサイトを得ることが出来ます。
クエリの実行にかかる時間
クエリによって検査されたドキュメントの数
クエリでインデックスを使用するかどうか
詳細については、「 クエリプロファイラーによるクエリ パフォーマンスの監視 」を参照してください。
Database Profiler
データベースプロファイラは、 MongoDBで実行されるクエリに関する詳細情報を収集し、 Capped system.profile
コレクションに保存します。
重要
データベースプロファイラは、データベースのパフォーマンスとディスク使用量に影響を与える可能性があります。本番環境の配置で有効にする前に、パフォーマンスとストレージへの影響を検討してください。
詳細については、プロファイラーのオーバーヘッド を参照してください。
データベースプロファイラを使用すると、現在のアプリケーション負荷における低速クエリのマイクロ ビューが取得されます。これにより、クエリのパフォーマンスの向上方法に関するいくつかのインサイトが得られます。
クエリの実行にかかる時間
クエリによって検査されたドキュメントの数
クエリでインデックスを使用するかどうか
詳細については、データベース プロファイラーの出力 を参照してください。
explain
find()
メソッドとaggregate()
メソッドは メソッドを提供します。このメソッドを使用すると、特定のexplain()
クエリまたは集計操作のクエリプランと実行統計を取得できます。
explain()
メソッドを使用すると、次のような特定のクエリの潜在的な問題を識別できます。
非効率的なフィルター
非効率的なインデックスの使用
増やすパフォーマンスの問題
コレクション統計
$collStats
集計ステージでは、特定のコレクションとその使用状況に関する統計情報が提供されます。インデックスとパフォーマンスの問題を特定するのに役立つ場合があります。
これにより、次のような有用な情報が提供される可能性があります。
コレクションとそのインデックスのストレージ使用量
ドキュメントの平均サイズ
インデックス統計
$indexStats
集計ステージは、コレクションによるインデックス使用に関する統計情報を提供します。これにより、次のような具体的なインデックスの使用の問題を特定できます。
クエリがインデックスを使用するかどうか、またどのくらいの頻度でインデックスを使用するか
インデックスが冗長かどうか