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

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

Cloud SQL for PostgreSQL では、データベースが処理するクエリを追跡するインデックス アドバイザーを使用できます。インデックス アドバイザーはこれらのクエリを定期的に分析し、クエリのパフォーマンスを改善する新しいインデックスを提案します。

インデックス アドバイザーによる推奨事項はテーブルとして出力され、クエリを実行して表示できます。また、オンデマンド分析とレポートをいつでもリクエストできます。

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

インデックス アドバイザーの推奨事項を有効にするには、Gemini in Databases を設定します。

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

インデックス アドバイザーの推奨事項を無効にするには、Cloud SQL for PostgreSQL インスタンスから cloudsql.enable_index_advisor フラグを削除します。インスタンスからフラグを削除する方法については、データベース フラグを構成するをご覧ください。

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

Cloud SQL for PostgreSQL は、自動的かつ定期的にインデックス アドバイザーの分析を実行します。

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

  • 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 は、現在のデータベース ユーザーが発行したクエリに基づいて、インデックスの推奨事項を表示します。

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

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");

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

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

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

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

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

SELECT google_db_advisor_reset();

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