Azure DocumentDB の Index Advisor を使用してクエリのパフォーマンスを調整する (プレビュー)

Index Advisor は、低速クエリの診断、クエリ実行動作の理解、最適化されたインデックス戦略の実装に役立つ、Azure DocumentDB 用の組み込みのパフォーマンス チューニング アシスタントです。 Index Advisor は、コレクションとインデックスの統計と共にクエリ構造を分析します。 その後、Index Advisor は、特定のインデックスがパフォーマンスの向上に役立つ理由を説明する、読みやすい説明を含む明確なデータドリブンの推奨事項を生成します。

インデックス アドバイザーの利点

Index Advisor を使用する利点を次に示します。

  • パフォーマンスのボトルネック と非効率的なクエリを特定します。
  • パフォーマンス効果によって優先順位付けされた実用的なインデックスの推奨事項を受け取ります
  • 明確でわかりやすい英語の説明を使用して、インデックスが重要な理由を理解します。
  • 拡張機能内でインデックスの推奨事項を即座に適用します。
  • インデックスが作成されると、前後のパフォーマンスが自動的に比較されます。

Index Advisor のユース ケース

Index Advisor では、データベースのパフォーマンス向上に役立つさまざまなクエリ パターンと最適化シナリオがサポートされています。

Scenario Description
等値/範囲クエリ 単純な等値フィルターまたは範囲フィルター ( field = valuefield > valueなど) を処理します。
複合フィルター/対象クエリ/参照結合 検索クエリの複合インデックスまたは対象インデックスで最適化できる複数のフィルター条件または結合を含むクエリを分析します。
複合インデックス 複数フィールド (複合) インデックスを提案して、複雑な検索/並べ替えクエリをサポートする
並べ替えのみ 並べ替え操作を改善またはインデックスでカバーできるタイミングを識別します。
フィルター + 並べ替え/インデックスのプッシュダウン インデックスレイヤー内でフィルター処理と並べ替えを効率的に処理できるようにインデックス構造を推奨し、ドキュメント スキャンを減らします。
既存のインデックス カバレッジ 検索クエリでサポートされます。インデックスが既に存在する場合は、新しいインデックスは推奨されません。

クエリ シナリオがこれらのパターンに該当する場合は、 Azure DocumentDB チーム に連絡して、特定のユース ケースに関するサポートを受けてください。

Prerequisites

  • Azure サブスクリプション

    • Azure サブスクリプションがない場合は、無料アカウントを作成してください。
  • 既存の Azure DocumentDB クラスター

  • Visual Studio Code

    • DocumentDB 拡張機能がインストールされている

    • 有効な GitHub Copilot サブスクリプションと共にインストールされた GitHub Copilot 拡張機能

Azure DocumentDB クラスターに接続する

Visual Studio Code 拡張機能内で Azure DocumentDB クラスターに接続します。

  1. アクティビティ バーから DocumentDB for Visual Studio Code 拡張機能を開きます。

  2. [ 接続の追加] を選択して、新しいクラスター接続を作成します。

  3. 認証方法を選択し、必要な接続の詳細を指定します。

  4. 接続をテストして、正常に動作していることを確認します。

  5. クラスターを展開して、使用可能なデータベースとコレクションを表示します。

分析用のクエリを開く

DocumentDB 拡張機能でクエリを開いて、Index Advisor でパフォーマンス分析を開始します。

  1. 拡張機能で 検索集計、または カウント クエリを開きます。

  2. [ Query Insights ] タブに移動します。

  3. クエリを実行します。 パネルには、実行時間、返されたドキュメント、調べたキー、検査されたドキュメントなどの主要業績評価指標が表示されます。 Index Advisor は、接続されたクラスター (Standard モード) または事前に読み込まれたデータ (プリロード モード) からクエリ実行プランと統計を収集して分析します。 言語モデル (GitHub Copilot) は、 サニタイズされた 計画と統計を調べて、最適なインデックスを推奨します。

    Important

    すべてのリテラル クエリ値 (電子メール、数値、テキストなど) は、分析のために送信される前に <value> プレースホルダーに置き換えられます。

    サニタイズの例は以下です。

    • 送信されない未処理のクエリ

      {
        "filter": {
          "email": "john.doe@example.com",
          "age": { "$gt": 25 }
        }
      }
      
    • 送信されるサニタイズされたクエリ

      {
        "filter": {
          "email": "<value>",
          "age": { "$gt": "<value>" }
        }
      }
      
  4. 推奨事項を直接適用する。拡張機能はインデックスを作成し、クエリを再実行してパフォーマンス メトリックを更新します。

  5. クエリ統計実行プランの概要を確認します。

    クエリ統計セクションのスクリーンショット。実行時間、返されたドキュメントの数、調べられたキー/ドキュメントなどの情報が表示されています。

  6. 最適化の機会の一覧を確認します。 各推奨事項には、人間が判読できる説明と、推奨されるインデックス定義が含まれています。

    現在のクエリの推奨事項の一覧を含む最適化の機会のスクリーンショット。

  7. [ 適用] を選択して、推奨されるインデックスを作成します。 インデックスの作成はバックグラウンドで非同期的に実行されます。 完了すると、パネルは更新された結果で自動的に更新されます。 インデックスの作成後、Index Advisor は 分析を再実行 し、メトリックを更新して、パフォーマンスの向上を比較できるようにします。

インデックス アドバイザーの制限事項

インデックス アドバイザー機能の制限事項を次に示します。

  • リージョン別の可用性: Index Advisor は現在、 米国カナダ のリージョンでのみ使用できます。
  • インデックス管理: Index Advisor では、新しいインデックスの作成のみが推奨されます。現時点では、既存のインデックスを削除または非表示にすることはお勧めしません。
  • シナリオの対象範囲: このリリースでは、前述のサポートされているシナリオのみが最適化されています。 その他のクエリの種類については、 Azure DocumentDB チーム に問い合わせるか、 インデックス作成のベスト プラクティスを確認してください
  • データの秘密度: データベース名とコレクション名をメタデータとして扱いますが、内部データ分類ポリシーを確認します。

Index Advisor を使用する場合のベスト プラクティス

インデックス アドバイザー機能を使用するためのベスト プラクティスを次に示します。

  • 統計をエクスポートまたは共有するときは、組織の データ ガバナンス ポリシー に従います。
  • インデックスの推奨事項を適用する前に確認し、ワークロードとコストの要件に合っていることを確認します。
  • 依存関係を確認したり 、Azure DocumentDB チームと相談したりせずに、インデックスを手動で削除しないようにします。
  • クエリ パターンがサポートされていない場合は、 インデックス作成のベスト プラクティス に関するガイダンスとサポートを参照してください。

インデックス アドバイザーに関する考慮事項

Index Advisor は、すべての手順でデータのプライバシーを保護しながらクエリを最適化できるように構築されています。

この一覧には、拡張機能によって収集されたデータが表示されます。

  • クエリ実行プラン – 構造情報とパフォーマンス メトリック。
  • コレクション統計 – ドキュメントの数、データとインデックスのサイズ、インデックスの数。
  • インデックスの詳細 – インデックス名、キー パターン、使用状況メトリック。
  • クラスター メタデータ – Azure ホスティングの状態や API の種類などの限られた情報。

コンプライアンスとデータ保護

コンプライアンスとデータ保護を確保するために、分析用の情報を送信する前に、システムは次のセーフガードを実装します。

  • クエリと実行プランのすべての リテラル値<value>に置き換えます。
  • コンテキストを保持するために、フィールド名とクエリ演算子 (email$gt$inなど) を保持する。
  • 実行プランを完全にサニタイズして、機密データや個人データが残らないようにします。
  • データのリテラル値が含まれていないため、パフォーマンス メトリック (nReturnedexecutionTimeMillisなど) を保持します。
  • 分析に必要な サニタイズされた構造、統計、メタデータのみを送信します。ドキュメントや生の値をサンプリングすることはありません。
  • 未承認のデータを必要とする将来の機能を、Microsoft のプライバシーとコンプライアンスの完全なレビューに適用します。

Index Advisor では、 実際のデータではなく、クエリ構造とパフォーマンス特性のみが分析されます。