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

AlloyDB for PostgreSQL には、データベースで定期的に処理されるクエリを追跡するインデックス アドバイザーが用意されています。インデックス アドバイザーによってクエリが定期的に分析され、そのクエリのパフォーマンスを高める新しいインデックスが提案されます。

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

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

AlloyDB は、インデックス アドバイザーの分析を定期的に自動的に実行します。結果は、各データベースの次の 2 つのテーブルビューで確認できます。

  • 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;

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

インデックス アドバイザーのスケジュールされた次回の分析を待つ代わりに、分析をすぐに実行してレポートを表示するよう AlloyDB にリクエストできます。これを行うには、次の SQL 関数を実行します。

SELECT * FROM google_db_advisor_recommend_indexes();

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

このコマンドを実行する PostgreSQL ユーザーロールによって、表示される推奨事項が異なる場合があります。このクエリを postgres または alloydbsuperuser ロールを持つ別のユーザーが実行すると、AlloyDB はインデックス アドバイザーの現在の推奨事項をすべて表示します。それ以外の場合、AlloyDB は、現在のデータベース ユーザーが発行したクエリに基づいて、インデックスの推奨事項を表示します。

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

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

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

インデックス アドバイザーを構成する

インデックス アドバイザーは、ほとんどのユースケースにデフォルト設定で対応できるように設計されていますが、ユーザーはさまざまなデータベース フラグを設定してその動作を微調整できます。詳細については、インデックス アドバイザーのフラグのリファレンス ページをご覧ください。