低速クエリのモニターと改善
Performance Advisorは、 MongoDBによって低速と見なされるクエリ述語を持つ操作を監視し、クエリのパフォーマンスを向上させるための新しい インデックスを提案します。 選択したホストと期間にわたって、Performance Advisor は、ログにある最近の低速クエリを最大20 、 000まで評価します。
推奨されるインデックスには、クエリシェイプでグループ化されたサンプル クエリが付属しています。これらのクエリは、インデックスに関する提案によりメリットを得るコレクションに対して実行されたものです。 Performance Advisorが、 MongoDB Ops Managerクラスターのパフォーマンスに悪影響を及ぼすことはありません。
注意
Performance Advisor を表示するには、次の条件を満たす必要があります。
クラスターで MongoDB バージョン 3.2 以降を実行します。
MongoDB Agent Automation を使用してクラスターを管理します。
MongoDB Agent の詳細については、「 MongoDB Agent 」を参照してください。
サンプル クエリのフィールド値を表示するには、次の 1 つ以上のロールを持つ MongoDB Ops Manager ユーザー である必要があります。
上記のロールを持たないユーザーは、 フィールド値を表示できません。
クエリが遅くなる一般的な理由
クエリが遅い場合、一般的な理由は次のとおりです。
クエリは現在のインデックスではサポートされていません。
コレクション内の一部のドキュメントには、検索とインデックス作成にコストがかかる大きな配列フィールドがあります。
1 つのクエリで、$lookup を使用して複数のコレクションから情報を検索します。
インデックスの考慮事項
インデックスは読み取りパフォーマンスを向上させますが、書き込み中にインデックスを更新する必要があるため、インデックスの数が多いと書き込みパフォーマンスに悪影響を与える可能性があります。コレクションにすでに複数のインデックスがある場合は、新しいインデックスを作成するかどうかを決定する際に、読み取りと書き込みのパフォーマンスのトレードオフを考慮してください。このようなコレクションのクエリを変更して既存のインデックスを活用できるかどうか、また、クエリが新しいインデックスのコストに見合うほど頻繁に発生するかどうかを調べます。
Performance Advisor は、不要なインデックスを識別して削除するのに役立ちます。 詳細については、「ドロップインデックスの推奨事項を確認する 」を参照してください。
Performance Advisor にアクセスする
Performance Advisorにアクセスするには、以下の手順を行います。
Performance Advisor には、クラスター内のすべてのコレクションにわたる最大 20 個のクエリシェイプと、それらのシェイプの推奨インデックスが表示されます。Performance Advisor は、インデックスを Impact に従ってランク付けします。これは、読み取られた無駄なバイトの合計に基づいて High または Medium を示します。インデックス ランキングの詳細については、「インデックスランキングを確認する」を参照してください。
インデックスに関する提案
Performance Advisor は、Impact に従って提案するインデックスをランク付けします。これは、読み取られた無駄なバイトの合計に基づいて High または Medium を示します。Performance Advisor がインデックスをランク付けする方法の詳細については、「インデックスのランク付けを確認する」を参照してください。
Performance Advisor が提案するインデックスを作成する方法については、「提案されたインデックスを作成する」を参照してください。
インデックス メトリクス
Performance Advisor が提案する各インデックスには、次のメトリクスが含まれます。これらのメトリクスは、インデックスによって改善されるクエリに特に適用されます。
メトリクス | 説明 |
---|---|
Execution Count | 改善される 1 時間あたりに実行されるクエリの数。 |
Average Execution Time | 影響を受けるクエリの現在の平均実行時間(ミリ秒単位)。 |
Average Query Targeting | 影響を受けたクエリによって返されたドキュメント 1 件ごとの平均読み取りドキュメント数。 クエリ ターゲティング スコアが高いほど、クエリ効率は低くなります。 クエリ ターゲティングについて詳しくは、「クエリ ターゲティング 」を参照してください。 |
In Memory Sort | メモリ内でソートする必要があった、1 時間あたりの影響を受けたクエリの現在の数。 |
Average Docs Scanned | スキャンされたドキュメントの平均数。 |
Average Docs Returned | 返されたドキュメントの平均数。 |
Avgerage Object Size | 平均オブジェクト サイズ。 |
サンプル クエリ
Performance Advisor は、提案されたインデックスごとに、インデックスによって改善される最も頻繁に実行されるクエリシェイプを表示します。Performance Advisor は、クエリシェイプごとに次のメトリクスを表示します。
メトリクス | 説明 |
---|---|
Execution Count | クエリシェイプに一致する、1 時間あたりに実行されるクエリの数。 |
Average Execution Time | クエリシェイプにマッチするクエリの平均実行時間(ミリ秒)。 |
Average Query Targeting | 一致するクエリによって返されたドキュメント 1 件ごとの平均読み取りドキュメント数。 クエリ ターゲティング スコアが高いほど、クエリ効率は低くなります。 クエリ ターゲティングについて詳しくは、「クエリ ターゲティング 」を参照してください。 |
Average Docs Scanned | スキャンされたドキュメントの平均数。 |
Average Docs Returned | 返されたドキュメントの平均数。 |
Performance Advisorには、クエリシェイプに一致する実行済みの各サンプル クエリと、そのクエリの特定のメトリクスも表示されます。
クエリ ターゲティング
各インデックス提案には、インデックスの対応するクエリシェイプに対して返されたドキュメントごとに読み取られたドキュメントの数を示す Average Query Targeting スコアが含まれます。スコア 1 は、読み取られたすべてのドキュメントがクエリに一致し、クエリ結果とともに返されたため、非常に効率的なクエリシェイプを表します。提案されたすべてのインデックスは、クエリのパフォーマンスを向上させる機会を表します。
フィルター インデックスの提案
デフォルトでは、Performance Advisorは配置内のすべてのクラスターのインデックスを提案します。特定のコレクションからの推奨インデックスのみを表示するには、Performance Advisor の上部にある Collection ドロップダウンを使用します。
Performance Advisor の上部にある Time Range ドロップダウンを使用して、Performance Advisor がインデックスを提案する際に考慮する時間範囲を調整することもできます。
インデックス提案の制限
インデックスのタイムスタンプ形式
Performance Advisor は、 ctime タイムスタンプ形式を使用するように構成された MongoDB データベース向けのインデックスは提案できません。 回避策として、このタイプのデータベースにはタイムスタンプ形式をiso 8601 -utcまたはiso 8601 -local に設定します。
ログ サイズ
Performance Advisor は、クラスターの最新のログ行を最大 200,000 行分析します。
推奨インデックスを作成する
Performance Advisor によって提案されたインデックスを、Performance Advisor 内で直接作成できます。インデックスを作成するときは、ターゲットコレクションへの読み取りと書き込みの比率を念頭に置きます。インデックスにはパフォーマンスコストが伴いますが、大規模なデータセットで頻繁にクエリを実行する場合はコストに見合うだけの価値があります。インデックス作成戦略について詳しくは、「インデックスの作成戦略」を参照してください。
動作
Performance Advisorでは一度に 1 つのインデックスのみ作成できます。 同時にさらに作成したい場合は、 Data Explorerまたはshellを使用できます
MongoDB Ops Managerは常に配置の最上位にインデックスを作成します。 Performance Advisorの表示中にシャーディングされたクラスター内の単一のシャードのインデックスを作成すると、 MongoDB Ops Managerはシャーディングされたクラスター全体に対してそのインデックスを作成します。
手順
推奨インデックスを作成するには、次の手順に従います。
(任意) <a class=\" \" target=\" \" href=\" \"> インデックス オプション を指定します。<a class=\" \" href=\" \" title=\" \"><svg xmlns=\" \" width=\" \" height=\" \" fill=\" \" viewbox=\" \" class=\" \" role=\" \" aria-label=\" \"><path fill=\" \" d=\" \"> <path fill=\" \" d=\" \">
{ <option1>: <value1>, ... }
例
次のオプション ドキュメントでは、インデックスの unique
オプションと name
を指定します。
{ unique: true, name: "myUniqueIndex" }
(任意) <a class=\" \" target=\" \" href=\" \"> 照合 オプションを設定します。<a class=\" \" href=\" \" title=\" \"><svg xmlns=\" \" width=\" \" height=\" \" fill=\" \" viewbox=\" \" class=\" \" role=\" \" aria-label=\" \"><path fill=\" \" d=\" \"> <path fill=\" \" d=\" \">
照合を使用して、大文字と小文字やアクセント記号の規則など、文字列比較の言語独自のルールを指定します。照合ドキュメントには、ICU ロケール コード を示す locale
フィールドが含まれており、照合動作を定義する他のフィールドが含まれている場合があります。
例
次の照合オプション ドキュメントでは、フランス語の照合にロケール値 fr
を指定しています。
{ "locale": "fr" }
MongoDB 照合がサポートするロケールのリストを確認するには、言語とロケールのリストを参照してください。各ロケールでデフォルトで有効になっている照合オプションなどについて詳しくは、MongoDB マニュアルの 照合 を参照してください。
(任意) ローリング方式でインデックスの構築を有効にします。
警告
重大な問題により SERVER-68925 、特定のMongoDB Ops Manager バージョン の を使用した の配置では、次のMongoDB Agent バージョンを実行しているクラスターで は自動ローリング インデックスのビルドMongoDB は実行されません。
MongoDB 4.2.19-4.2.22
MongoDB 4.4.13-4.4.16
MongoDB 5.0.6-5.0.11
MongoDB 6.0.0-6.0.1
クラスターで手動ローリング インデックスのビルドを安全に実行できます。 自動ローリング インデックスビルドを安全に実行するには、MongoDB Agent を12.0.11.7606以降にアップグレードするか、クラスターを次のようにアップグレードします。
MongoDB 4.2.23 以降
MongoDB 4.4.17 以降
MongoDB 5.0.12 以降
MongoDB 6.0.2 以降
重要
ローリング インデックス構築は、特定の条件を満たした場合にのみ成功します。インデックス構築に成功するようにするには、再起動ループをトリガーすることが多い次の設計パターンを避けてください。
インデックス キーが インデックス キーの制限 を超えています
インデックス名はすでに存在します
複数の配列フィールドにおけるインデックス
テキスト インデックスの最大数を持つコレクションのインデックス
テキスト インデックスの最大数を持つコレクションのテキスト インデックス
注意
Data Explorer は、スタンドアロン配置のローリング方式でのインデックスのビルドをサポートしていません。
ローリング方式でインデックスをビルドすると、レプリカセットおよびシャーディングされたクラスターへのインデックスビルドによるパフォーマンスへの影響が軽減されます。 クラスターの可用性を維持するために、 MongoDB Ops Managerは、セカンダリ から始めて、一度に 1 つのノードをクラスターから削除します。
ローリング方式でインデックスを構築した後、MongoDB database が4.2
未満のFCVで実行される場合は、ヘッドデータベースを再同期して、ヘッドデータベースが新しいインデックスを考慮するようにします。
MongoDB Ops Managerは、すべてのノードで成功しないローリング インデックス ビルドを自動的にキャンセルします。 ローリング インデックスのビルドが一部のノードで完了したが、他のノードで失敗した場合、 MongoDB Ops Managerはビルドをキャンセルし、正常にビルドされたすべてのノードからインデックスを削除します。
ローリング インデックスのビルドがキャンセルされた場合、 MongoDB Ops Managerは アクティビティフィード イベント を生成し、次の情報を含む通知メールをプロジェクト所有者に送信します。
ローリング インデックス構築に失敗したクラスターの名前
ローリング インデックス構築に失敗した名前空間
クラスターと名前空間を含むプロジェクト
プロジェクトを含む組織
アクティビティ フィード イベントへのリンク
インデックスの再構築について詳しくは、「レプリカセットでインデックスを構築する」を参照してください。
注意
次のインデックス オプションは 、ローリング方式でのインデックスのビルドと互換性がありません。
Optionsペインでこれらのオプションを指定すると、MongoDB Ops Manager はこれらのオプションを無視します。
Confirm Operationダイアログで、インデックスを確認します。
重要
インデックスのビルドが完了すると、 MongoDB Ops Managerはアクティビティフィード イベントを生成し、次の情報を含む通知メールをプロジェクト所有者に送信します。
インデックス構築の完了日
インデックス構築が完了したクラスターの名前
インデックス構築が完了した名前空間
クラスターと名前空間を含むプロジェクト
プロジェクトを含む組織
アクティビティ フィード イベントへのリンク