Query Targeting アラートは、多くの場合、非効率的なクエリを示します。
アラート条件
プロジェクト レベルの アラート設定ページで次のアラート条件を構成して、アラートをtriggerできます。
Query Targeting: Scanned Objects / Returned アラートは、サンプリング期間中にすべての操作でサーバー全体で返されたドキュメントの平均数に対し、スキャンされたドキュメントの平均数が定義されたしきい値を超えたときにトリガーされます。デフォルトのアラートでは 1000:1 のしきい値が使用されています。
理想的には、スキャンされた文書と返された文書の比率は 1 に近くなるはずです。比率が高いと、クエリのパフォーマンスに悪影響を及ぼします。
Query Targeting: Scanned / Returned 返されたドキュメントの実際の数に対するクエリを満たすために検査されたインデックス キーの数が、ユーザー定義のしきい値を満たすか、それを超える場合に発生します。このアラートは、デフォルトでは有効になっていません。
例
次の mongod ログエントリは、非効率的なクエリから生成された統計を示しています。
<Timestamp> COMMAND <query> planSummary: COLLSCAN keysExamined:0 docsExamined: 10000 cursorExhausted:1 numYields:234 nreturned:4 protocol:op_query 358ms
このクエリは、10,000 のドキュメントをスキャンし、2500 の比率で 4 ドキュメントのみを返すため、非常に非効率的です。インデックス キーは検査されなかったため、MongoDB はコレクション内のすべてのドキュメントをスキャンしました。これはコレクションスキャンと呼ばれます。
一般的な Triggers
クエリのターゲット アラートは通常、1 つまたは複数のクエリをサポートするインデックスがない場合や、既存のインデックスが 1 つまたは複数のクエリを部分的にしかサポートしていない場合に発生します。
MongoDB Search プロセス(mongot)がMongoDB Search インデックスを最新の状態に保つために使用するchange streamカーソルは、クエリ ターゲット設定率に貢献し、比率が高い場合はアラートをトリガーできます。
当面の問題の修正
1 つまたは複数のインデックスを追加して、非効率的なクエリをより良く処理します。
Performance Advisor は、インデックスを作成する最も簡単かつ迅速な方法を提供します。Performance Advisor は、MongoDB が低速と見なすクエリをモニタリングし、パフォーマンスを向上させるためのインデックスを推奨します。Atlas は、クラスター全体の操作の実行時間に基づいて、低速クエリのしきい値を動的に調整します。
推奨インデックスの作成方法については、低速クエリの [Create Index] をクリックしてください。
注意
クエリが低速クエリのしきい値を超え、スキャンされたドキュメントと返されたドキュメントの比率がアラートで指定されたしきい値を上回っている場合、Performance Advisor から推奨インデックスを受け取らずに、非効率的なクエリに対してクエリのターゲット アラートを受け取ることがあります。
さらに、どのクエリがアラートを生成したかを判断するには、以下のリソースを使用します。
リアルタイム パフォーマンス パネルは、Atlas クラスターで MongoDB をホストしているマシン上の現在のネットワーク トラフィックとデータベース操作をモニタリングして表示します。
MongoDB ログには、Atlas クラスター内の各
mongodインスタンスのアクティビティ(クエリを含む)の記録が保持されます。cursor.explain()
mongoshのコマンドは、すべてのクエリのパフォーマンスの詳細を提供します。名前空間インサイトは、コレクション レベルのクエリ レイテンシを監視します。
Atlas クエリプロファイラーは、クラスター上のすべての操作の平均実行時間と比較して、Atlas が低速と見なす操作を記録します。
長期的な解決策の実装
クエリ パフォーマンスの詳細については、以下を参照してください。
進捗状況の監視
Atlas は、次のような方法でクエリのターゲットを視覚化します。
クエリ ターゲティング メトリクス。スキャンされたオブジェクトと返されたオブジェクトの比率が高いことを強調表示します。
名前空間インサイト。コレクション レベルのクエリ レイテンシを監視します。
クエリプロファイラー。クラスター上で実行された特定の非効率的なクエリを説明します。
クエリ ターゲティング メトリクス
履歴メトリクスを表示して、クラスターのクエリ パフォーマンスを視覚化できます。Atlas UI で Query Targeting メトリクスを表示するには:
AtlasGoClustersAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
サイドバーで、 Database見出しの下のClustersをクリックします。
[ Clusters (クラスター) ] ページが表示されます。
Query Targeting チャートには、サーバー上で実行されたクエリの次のメトリクスが表示されます。
メトリクス | 説明 |
|---|---|
Scanned Objects / Returned | 返されたドキュメントの平均数に対する検査されたドキュメントの平均数を示します。 |
Scanned / Returned | 返されたドキュメントの実際の数に対するクエリを満たすために検査されたインデックス キーの数を示します。 |
MongoDB Search プロセス(mongot)がMongoDB Search インデックスを最新の状態に保つために使用するchange streamカーソルは、クエリ ターゲット設定率に貢献し、比率が高い場合はアラートをトリガーできます。
これらのメトリクスのいずれかがユーザー定義のしきい値を超えると、Atlas は対応する Query Targeting: Scanned Objects / Returned または Query Targeting: Scanned / Returned アラートを生成します。
注意
リアルタイム パフォーマンス パネルを使用して、Query Targeting の操作比率をリアルタイムで表示することもできます。
名前空間のインサイト
名前空間インサイトは、コレクション レベルのクエリ レイテンシを監視します。特定のホストおよび操作タイプに関するクエリ レイテンシのメトリクスと統計情報を表示できます。ピン留めされた名前空間を管理し、対応するクエリ レイテンシ チャートに表示する名前空間を最大 5 つ選択できます。
名前空間インサイト にアクセスするには、
AtlasGoClustersAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
サイドバーで、 Database見出しの下のClustersをクリックします。
[ Clusters (クラスター) ] ページが表示されます。
Query Profiler
クエリプロファイラーには、特定の非効率的なクエリを特定するのに使用できるいくつかのメトリクスが含まれています。過去 24 時間までのクエリ操作を視覚化できます。クエリプロファイラーでは、ログに記録されたクエリの Examined : Returned Ratio(返されたドキュメントに対して検査されたインデックス キー)を表示できます。これにより、Query Targeting: Scanned / Returned アラートをトリガーしたクエリを特定するのに役立つ場合があります。このチャートは、返されたドキュメントの実際の数に対するクエリを満たすために検査されたインデックス キーの数を示します。
注意
デフォルトの Query Targeting: Scanned Objects / Returned アラート比率は若干異なります。このアラートは、サンプリング期間中にスキャンされたドキュメントの平均数と、返されたドキュメントの平均数の比率によってトリガーされます。
Atlas は、自動的にしきい値が設定されるため、Query Targeting 比率に寄与する個別の操作をログに記録しない場合があります。ただし、クエリプロファイラーと Query Targeting メトリクスを使用してクエリのパフォーマンスを分析および最適化することはできます。
クエリプロファイラーへのアクセス
AtlasGoClustersAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
サイドバーで、 Database見出しの下のClustersをクリックします。
[ Clusters (クラスター) ] ページが表示されます。