インデックス アドバイザーを使用する

このページでは、Cloud SQL for PostgreSQL インデックス アドバイザーと、インデックスの推奨事項を表示および適用する方法について説明します。

Cloud SQL for PostgreSQL には、データベースが定期的に処理するクエリを追跡するフルマネージド インデックス アドバイザーが用意されています。インデックス アドバイザーは、これらのクエリを定期的に分析して、クエリのパフォーマンスを改善できる新しいインデックスを推奨します。インデックス アドバイザーにより、システムとクエリのパフォーマンスの問題を検出し、修正できます。

インデックス アドバイザーの仕組み

インデックス アドバイザーは、次の処理を行うことでクエリ処理を改善します。

  • インデックスを作成する SQL コマンドを使用して、インデックスのセットを推奨します。
  • 推奨インデックスの評価に役立つデータ(推定ストレージ サイズ、インデックスがクエリに与える影響など)を提供します。
インデックス アドバイザーは、データベース名、スキーマ名、テーブル名、列名を含む CREATE INDEX コマンドを保存、表示します。追跡されるクエリはすべて正規化されたクエリであり、リテラルはすべて削除されます。

インデックスに関する推奨事項は、保存時に暗号化されます。

制限事項

Cloud SQL for PostgreSQL インデックス アドバイザーには、次の制限事項があります。

  • インデックス アドバイザーは CREATE INDEX の推奨事項のみを提供します。
  • インデックス アドバイザーは、次の構成のインスタンスをサポートしていません。
    • Cloud SQL Enterprise エディションのインスタンス
    • リードレプリカ インスタンス

始める前に

インデックス アドバイザーの推奨事項を取得するには、Cloud SQL Enterprise Plus エディションを使用し、Cloud SQL インスタンスで Cloud SQL Enterprise Plus エディションの Query Insights を有効にする必要があります。

必要なロールと権限

インデックス アドバイザーの推奨事項を取得するために必要な権限を取得するには、Cloud SQL インスタンスをホストするプロジェクトに対する Cloud SQL 閲覧者 roles/cloudsql.viewer)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

この事前定義ロールには、インデックス アドバイザーの推奨事項を取得するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

インデックス アドバイザーの推奨事項を取得するには、次の権限が必要です。

  • databaseinsights.recommendations.query
  • databaseinsights.resourceRecommendations.query

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

インデックス アドバイザーの推奨事項を有効にする

インデックス アドバイザーの推奨事項を有効にするには、次の操作を行います。

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

    .
  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。.
  3. [構成] タイルで、[構成の編集] をクリックします。
  4. [インスタンスのカスタマイズ] で [Query Insights] を開きます。
  5. [Query Insights を有効にする] が有効になっていることを確認します。
  6. まだ選択されていない場合は、[Enterprise Plus の機能を有効にする] を選択します。
  7. [インデックス アドバイザーを有効にする] を選択します。
  8. [保存] をクリックします。

インデックス アドバイザーの推奨事項を無効にする

インデックス アドバイザーの推奨事項を無効にするには、次の操作を行います。

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [構成] タイルで、[構成の編集] をクリックします。
  4. [インスタンスのカスタマイズ] で [Query Insights] を開きます。
  5. [インデックス アドバイザーを有効にする] チェックボックスをオフにします。
  6. [保存] をクリックします。

インデックス アドバイザーの推奨事項を表示する

Cloud SQL は、インデックス アドバイザーの分析を定期的に自動で実行します。インデックス アドバイザーの推奨事項を表示するには、Query Insights ダッシュボードを使用します。インデックス アドバイザーの推奨事項はテーブルとしてクエリを実行して表示できます。また、オンデマンド分析とレポートをいつでもリクエストできます。

Query Insights ダッシュボードで推奨事項を表示、フィルタリングする

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [Query Insights] をクリックします。
  4. インデックス アドバイザーの推奨事項は、[最多のクエリとタグ] セクションの [推奨事項] 列に表示されます。
  5. 省略可: CREATE INDEX の推奨事項を含むクエリのみを表示するには、[推奨事項: インデックスの作成] のフィルタを追加します。

クエリの推奨事項を表示する

特定のクエリのインデックス推奨を表示する手順は次のとおりです。

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [Query Insights] をクリックします。
  4. [上位のクエリとタグ] セクションで、[クエリ] をクリックします。
  5. クエリの推奨事項の詳細を取得するには、次のいずれかを行います。
    • クエリをクリックして、選択したクエリの推奨事項の詳細を確認します。これには以下の情報が含まれます。
      • パフォーマンスへの影響(高、中、低): 推奨されるすべてのインデックスが作成された後の推定クエリ速度。
      • 推奨事項: インデックスの推奨事項を作成します。
      • 影響を受けるテーブル: インデックスの作成時に影響を受けるテーブルの数。
      • 推定される必要な追加ストレージ サイズ: 推奨されるインデックスをすべて作成するために必要な推定ストレージ サイズ。
      • 影響を受けるクエリの数: インデックスの推奨事項の影響を受けるワークロードのクエリの合計数。インデックスは複数のクエリにメリットをもたらす場合があります。
    • 特定のクエリの [インデックスの作成] をクリックすると、クエリのパフォーマンスを改善するためのインデックスの作成に関する詳細な推奨事項を確認できます。

推奨事項をデータベース表形式として表示する

結果は、各データベースの次のテーブルビューで確認できます。

  • google_db_advisor_recommended_indexes: 各データベースに対して推奨される新しいインデックスのリストです。また、各インデックスに必要なストレージの推定値と、各インデックスが影響を与える可能性のあるクエリの数も表示されます。

  • google_db_advisor_workload_report: アドバイザーが 1 つ以上の新しいインデックスを推奨している各クエリを一覧表示します。各行には、関連するクエリの推奨事項が要約されています。

たとえば、インデックス推奨事項の最新の分析結果をテーブル形式で表示するには、次のクエリを実行します。

SELECT * FROM google_db_advisor_recommended_indexes;

インデックス アドバイザーの最新の分析で推奨事項が見つからない場合、このクエリは行のないテーブルを返します。

これらのレポートはすべて通常のデータベース ビューとして存在するため、この情報をフィルタまたは表示するクエリを作成できます。たとえば、推奨インデックスと関連する完全なクエリをペアに設定したレポートを表示するには、それぞれの query_id 列で google_db_advisor_workload_report ビューと google_db_advisor_workload_statements ビューを結合します。

SELECT DISTINCT recommended_indexes, query
FROM google_db_advisor_workload_report r, google_db_advisor_workload_statements s
WHERE r.query_id = s.query_id;

インデックス分析を手動でリクエストする

インデックス アドバイザーのスケジュールされた次回の分析を待つ代わりに、分析をすぐに実行してレポートを表示するよう Cloud SQL for PostgreSQL にリクエストできます。Cloud SQL for PostgreSQL の場合、インデックス アドバイザーを有効にして手動分析を実行するには、少なくとも 15 分待つ必要があります。これを行うには、次の SQL 関数を実行します。

SELECT * FROM google_db_advisor_recommend_indexes();

分析が完了すると、Cloud SQL for PostgreSQL は推奨インデックスの説明と推定ストレージ要件を含むテーブル形式のレポートを表示します。分析で、推奨される新しいインデックスが見つからない場合、ビューには行が含まれません。

このコマンドを実行するユーザーロールによって、表示される推奨事項が異なる場合があります。Cloud SQL for PostgreSQL は、現在のデータベース ユーザーが発行したクエリに基づいて、インデックスの推奨事項を表示します。

推奨インデックスを作成する

推奨インデックスは、Query Insights ダッシュボードまたはデータベース表形式から作成できます。

Query Insights ダッシュボードを使用して推奨インデックスを作成する手順は次のとおりです。

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [Query Insights] をクリックします。
  4. [データベースの負荷別の上位項目] テーブルで、[クエリ] をクリックします。
  5. 特定のクエリの [インデックスの作成] をクリックします。
  6. [すべての index コマンドをコピー] をクリックします。CREATE INDEX コマンドがクリップボードにコピーされます。
  7. コマンドラインでプライマリ インスタンスに接続します。
  8. 推奨されたインデックスを作成するには、クリップボードにコピーされたコマンドを実行します。以下はその例です。

    CREATE INDEX ON "public"."demo_order" ("customer_id");

google_db_advisor_recommended_indexes ビューの index 列では、各行にその行で推奨されるインデックスを生成するための完全な PostgreSQL CREATE INDEX DDL ステートメントが含まれています。

その行の推奨事項を適用するには、この DDL ステートメントをそのまま実行します。クリップボードにコピーして psql プロンプトに貼り付けることも可能です。

たとえば、前のセクションで説明したクエリを使用して、手動で分析を実行した結果は次のようになります。

                    index                   | estimated_storage_size_in_mb
--------------------------------------------+------------------------------
 CREATE INDEX ON "School"."Students"("age") |                            3
(1 row)

このレポートに含まれている推奨事項は 1 件だけで、School スキーマの Students テーブルの age 列に単一列インデックスを追加するというものです。このアドバイスを適用するには、このレポートで提示されている、次の DDL クエリを入力します。

CREATE INDEX ON "School"."Students"("age");

影響を受けるクエリを表示する

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. [Query Insights] をクリックします。
  4. [データベースの負荷別の上位項目] テーブルで、[クエリ] をクリックします。
  5. 特定のクエリの [インデックスの作成] をクリックします。
  6. [影響を受けるクエリを表示] をクリックします。
  7. クエリをクリックして、影響を受けるクエリの詳細を確認します。

インデックス アドバイザーが追跡したクエリを表示する

google_db_advisor_workload_statements ビューには、インデックス アドバイザーが追跡したすべてのクエリのリストと、次の指標などの各クエリに関する重要なメタデータが含まれます。

  • インスタンスが各クエリを実行した回数
  • インスタンスがこれらのクエリの処理に費やした合計時間
  • これらのクエリを実行するデータベース ユーザーの ID

インデックス アドバイザーの追跡対象のクエリを消去する

追跡対象のクエリを消去すると、インスタンスでのインデックス アドバイザーの動作をリセットできます。これを行うには、次の SQL 関数を実行します。

SELECT google_db_advisor_reset();

Cloud SQL for PostgreSQL は、すぐにインデックス アドバイザーの追跡対象のクエリのコレクションを空にします。

次のステップ