M10 以上のクラスターでのみ使用可能
クエリプロファイラーはパフォーマンスの問題を診断およびモニターします。このモニタリングにより、実行速度が遅いクエリとその主要なパフォーマンス統計を Atlas UI に表示できます。
Atlas は、 mongod
インスタンスのいずれかから統計情報を収集して表示します。クエリプロファイラーは mongod
インスタンスの ログ データに基づいて、スロー クエリを識別します。Atlas はインスタンスの Query Profiler セクションの Query Insights タブに、このデータを表示します。
注意
クエリプロファイラーはデータベースプロファイラーとは異なります。クエリプロファイラーは mongod
ログのエントリに基づいて、特定の非効率的なクエリを識別します。データベースプロファイラーは、指定されたプロファイリング レベルに基づいて、mongod
で実行されたコマンドに関する詳細情報を返します。プロファイリング レベルを変更しても、クエリプロファイラーに表示されるスロー クエリには影響しません。
Atlas クエリプロファイラーには、 デフォルトでクラスター全体の操作が表示されます。 Filter by Hosts ドロップダウンを使用して、クエリプロファイラーがデータを表示する操作のホストをフィルタリングできます。これにより、1 つ以上の特定のホストに関連するデータを表示したり、プライマリまたはセカンダリ ホスト グループを表示したりできます。 Query Insightsタブには、次のような設定された時間枠でのデータベース操作の遅延を明らかにする情報が表示されます。
Operation Execution Time
Docs Examined : Returned Ratio
Atlas クエリプロファイラーは、追加のデータポイントをサポートするために、同じタイムスタンプの周囲の同じコレクションで実行される同じタイプのビン化操作をサポートします。
追加のデータポイントをサポートするために、Atlas クエリプロファイラーは、次の基準を満たすビン化操作をサポートします。
操作は同じ操作タイプです。
操作は同じ名前空間で実行中です。
操作は
hasSort
とusedIndex
のブール値に一致します。操作は、同じタイムスタンプの周囲で実行されます。
Atlas は各ホストでの平均操作実行時間に基づいて、各 mongod
ホストの低速操作のしきい値を管理します。このしきい値は db.setProfilingLevel
mongosh
コマンドを使用して変更できます。
注意
db.setProfilingLevel
を使用して低速操作のしきい値を変更すると、パフォーマンスとシステムログ設定に影響する可能性があります。本番環境の配置で db.setProfilingLevel
を使用してクエリプロファイラーの設定を調整する前に、パフォーマンスとセキュリティへの影響を慎重に検討してください。ノードの再起動後、クエリプロファイラーの設定はデフォルト値にリセットされます。
さらに、散布図のX軸を拡大すると低速操作が再度取得され、選択した時間枠での低速操作をより詳細に再現できる場合があります。
注意
Considerations
重要
クエリプロファイラーを有効にする前に、以下の注意事項をお読みください。
セキュリティ
プロファイルデータには、データベースクエリの内容などの機密情報が含まれる場合があります。このデータを Atlas に開示することが、貴組織の情報セキュリティ保護ルールに違反していないことを確認してください。
データ分析の制限事項
クエリプロファイラーは、一度に約 100,000 のサンプル ログを表示します。選択したホストと時間範囲で 100,000 以下のログが記録された場合は、すべてのログが表示されます。
データ表示の制限
Atlas は、Query Profiler チャートに最大 100,000 データ ポイントを表示します。
ログデータはバッチ処理されます。データにはリアルタイムから最大 5 分の遅延があります。
ログの量
クラスターのアクティビティが急増し、極端に大量のログメッセージが生成された場合、Atlas は一定期間、新しいログの収集と保存を停止することがあります。
注意
ログ分析レート制限は、パフォーマンス アドバイザー UI、クエリ インサイト UI、アクセス トラッキング UI、および Atlas 検索クエリ分析 UI にのみ適用されます。ダウンロード可能なログ ファイルは常に完全です。
高レイテンシ $lookup 操作
一部の高レイテンシ $lookup
操作では、外部コレクションの低速クエリログは生成されません。これは、低速クエリ ログはクエリプロファイラーで報告される操作に対応するために発生する可能性があり、レイテンシメトリクスはコレクションロックが取得された場合にのみ増加するためです。
シャードに対する $lookup
クエリがローカル読み取りを実行できる場合、$lookup
は 外部コレクションをクエリするための別の操作をレコードしません。ローカル読み取りは、外部コレクションのクエリが、現在の操作が実行されているのと同じシャードのみを対象としている場合の を指します。その結果、$lookup
操作によって Namespace Insights のレイテンシメトリクスと操作数が増加しますが、外部コレクションの低速クエリログは生成されません。
必要なアクセス権
プロジェクトの Performance Advisor とクエリプロファイラーを有効または無効にするには、プロジェクトに対する Project Owner
ロールまたはその親組織に対する Organization Owner
ロールが必要です。
クエリプロファイラーでクエリ パフォーマンスを表示するには、プロジェクトに対するProject Read Only
またはProject Observability Viewer
アクセス権が必要です。
クエリプロファイラーの有効化と無効化
Atlas はデフォルトでクエリプロファイラーを有効にします。
クエリプロファイラーを無効にする方法。
Atlas で、Project Settings ページに移動します。
警告: ナビゲーションの改善が進行中
現在、新しく改善されたナビゲーション エクスペリエンスを展開しています。次の手順が Atlas UIのビューと一致しない場合は、プレビュー ドキュメントを参照してください。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
Projects メニューの横にある Options メニューをクリックし、 Project Settings をクリックします。
[ Project Settings ]ページが表示されます。
クエリプロファイラーによる低速クエリの検出
次のセクションでは、 クエリプロファイラー を使用して低速クエリを見つける方法について説明します。
クエリプロファイラーへのアクセス
Atlas で、プロジェクトの [Clusters] ページに移動します。
警告: ナビゲーションの改善が進行中
現在、新しく改良されたナビゲーション エクスペリエンスを導入中です。次の手順が Atlas UI の表示と一致しない場合は、プレビュー ドキュメントを参照してください。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
クエリプロファイラーをカスタマイズします。
クエリプロファイラーは、 散布チャートとチャートの直下にある テーブル を使用することで、低速操作を見つけるのに役立ちます。
[Filter by Hosts ドロップダウンでメトリクスを表示する 1 つ以上のホストを選択します。
Time Range または Filter by Date and Time ドロップダウンから期間を選択します。クエリプロファイラーには、デフォルトで過去の 24 時間のデータが表示されます。
Operation Execution Time ドロップダウンからメトリクスを選択します。オプションは次のとおりです。
Operation Execution Time (デフォルト): MongoDBデータベース操作が完了するまでにかかった合計時間(通常はミリ秒単位)。
Response Length:操作に応答してデータベースによって返されたドキュメントまたはデータのサイズ(バイト単位で測定)。
Docs Examined: クエリの結果を見つけるためにコレクション内でスキャンされたドキュメントの合計数。
Docs Returned: Atlas がクエリに返したクエリ条件に一致したドキュメントの数。
Keys Examined: クエリの実行中にデータベースによってスキャンされたインデックスエントリの合計数。
Num Yields: 他の操作を続行するために操作が一時停止した回数。
Docs Examined : Returned Ratio: Docs Examined を Docs Returned で割った比率。
Keys Examined : Returned Ratio: Keys Examined を Docs Returned で割った比率。
プロファイルする操作を変更するには、All operation types ドロップダウンをクリックします。クエリプロファイラーには、すべての操作タイプがデフォルトで表示されます。
パフォーマンス メトリクスの解釈。
低速クエリを調べるときは、まず次の重要なメトリクスとパターンを調べます。
Operation Execution Time (
millis
): クエリ時間(ミリ秒単位)。これは、低速クエリのプライマリ インジケーターです。このメトリクスが一貫して高い場合は、クエリ ロジックの最適化、結果のバッチ処理、またはデータへのアクセス方法を再検討してください。クエリログに
"planSummary": "COLLSCAN":
が表示されている場合、クエリはコレクションスキャンを実行し、インデックスを使用しませんでした。これは、インデックスを追加するか、クエリを書き換えるための強力なシグナルです。Docs Examined (
docsExamined
): MongoDBがクエリを検査したドキュメントの数。Docs Examined が Docs Returned よりもかなり大きい場合、多くの場合次のことを意味します。クエリは結果を見つけるために多くのドキュメントをスキャンするため、ネットワークレイテンシとアプリケーションのパフォーマンスに影響可能性があります。
既存のインデックスは非効率的または最適ではありません。詳細については、「 インデックス 」を参照してください。
Keys Examined (
keysExamined
): クエリに対してスキャンされたインデックスキーの数。フィルター条件を含むクエリで、このメトリクスが0
の場合、インデックスはなくMongoDB がコレクション全体をスキャンした可能性が高くなります。これは低速の主な原因です。Docs Examined Keys Examined0
Docs Examinedが非常に高く、 が または と比較して非常に低い場合は、コレクションまたは非常に選択的でないインデックスがスキャンされている可能性があります。詳細については、「 インデックス 」を参照してください。Docs Examined : Returned Ratio が高い場合は、クエリが多くのドキュメントをスキャンして結果がほとんど返されないことを意味します。これは、非効率的なクエリやインデックスの欠落の可能性があります。
Num Yields (
numYields
) :リソースResponse Length: 応答長が異常に長い場合は、クエリが必要以上に多くのデータを返していることを示します。返されるフィールドを制限するには、 プロジェクション の使用を検討してください。
Has Index Coverage (
usedIndex
): このブール値は、インデックスが使用されているかどうかを確認します。インデックスを作成する必要があるクエリでfalse
に設定されている場合は、インデックスを追加します。hasSort
がtrue
に設定されている場合、クエリにsort()
メソッドが含まれていることを示します。インデックスのないsort()
メソッドは、非常にリソースを集中的に消費する可能性があります。検索インデックスの構成をチェックし、sort()
メソッドをサポートしているかどうかを確認します。