次の方法で共有


Azure Database for PostgreSQL - フレキシブル サーバーのインデックス チューニングで生成されるインデックスのレコメンデーションを使用する

インデックス チューニングでは、azure_sys データベース内の intelligentperformance スキーマにある一連のテーブルで作成されるレコメンデーションが保持されます。

現時点では、この情報は、この目的のために Azure portal ページ ビルドを使用するか、クエリを実行して azure_sys データベースの intelligent performance 内で使用可能な 2 つのビューからデータを取得することで読み取ることができます。

Azure portal を使用してインデックスのレコメンデーションを使用する

  1. Azure portal にサインインし、Azure Database for PostgreSQL フレキシブル サーバー インスタンスを選択します。

  2. メニューの [インテリジェント パフォーマンス] セクションで [インデックス チューニング] を選択します。

    • この機能が有効になっていても、レコメンデーションがまだ生成されていない場合、画面は次のようになります。

      機能が有効になっているがレコメンデーションはない場合の [インデックスのチューニング] ページを示すスクリーンショット。

    • この機能が現在無効になっており、過去にレコメンデーションが生成されていない場合、画面は次のようになります。

      機能が無効になっており、レコメンデーションもない場合の [インデックスのチューニング] ページを示すスクリーンショット。

    • この機能が有効になっていて、レコメンデーションがまだ生成されていない場合、画面は次のようになります。

      機能が有効になっているが、レコメンデーションがない場合の [インデックスのチューニング] ページを示すスクリーンショット。

    • 機能が無効になっているが、レコメンデーションが生成されている場合、画面は次のようになります。

      機能が無効になっているが、レコメンデーションがある場合の [インデックスのチューニング] ページを示すスクリーンショット。

  3. 使用可能なレコメンデーションがある場合は、[インデックスのレコメンデーション表示] の要約を選択して、完全な一覧にアクセスします。

    レコメンデーションがある場合の [インデックスのチューニング] ページと、完全な一覧にアクセスする方法を示すスクリーンショット。

  4. この一覧には、使用可能なすべてのレコメンデーションと、それぞれの詳細が表示されます。 既定では、一覧は [最終レコメンデーション] (降順) で並べ替えられます。一番上に最新のレコメンデーションが表示されます。 ただし、他の列で並べ替え、フィルター ボックスを使用することで、表示される項目の一覧を、データベース名、スキーマ名、またはテーブル名に指定されたテキストが含まれている項目に絞り込むことができます。

    いくつかのレコメンデーションを含む [インデックスのレコメンデーション] ページの側面を示すスクリーンショット。

  5. 特定のレコメンデーションに関する詳細情報を表示するには、そのレコメンデーションの名前を選択すると、画面の右側に [インデックスのレコメンデーションの詳細] ウィンドウが開き、そのレコメンデーションに関して使用可能なすべての詳細が表示されます。

    1 つの特定のレコメンデーションの [インデックスのレコメンデーションの詳細] ウィンドウの側面を示すスクリーンショット。

azure_sys データベースで使用可能なビューを使用してインデックスのレコメンデーションを使用する

  1. インスタンスに接続するためのアクセス許可を持つ任意のロールを使用して、サーバーで使用可能な azure_sys データベースに接続します。 public ロールのメンバーは、これらのビューから読み取ることができます。
  2. sessions ビューでクエリを実行して、レコメンデーション セッションに関する詳細を取得します。
  3. CREATE INDEX と DROP INDEX のインデックス チューニングによって生成されたレコメンデーションを取得するには、recommendations ビューに対してクエリを実行します。

ビュー

azure_sys データベース内のビューは、インデックスのチューニングによって生成されたインデックスのレコメンデーションにアクセスして取得する便利な方法を提供します。 具体的には、createindexrecommendations および dropindexrecommendations ビューにはそれぞれ、CREATE INDEX と DROP INDEX のレコメンデーションに関する詳細情報が含まれています。 これらのビューでは、セッション ID、データベース名、アドバイザーの種類、チューニング セッションの開始時刻と停止時間、レコメンデーション ID、レコメンデーションの種類、レコメンデーションの理由、その他の関連する詳細などのデータが公開されます。 これらのビューに対してクエリを実行することで、ユーザーはインデックスのチューニングによって生成されたインデックスのレコメンデーションに簡単にアクセスして分析できます。

intelligentperformance.sessions

sessions ビューには、すべてのインデックス チューニング セッションのすべての詳細が公開されます。

列名 データ型 (data type) 説明
session_id uuid 開始されたすべての新しいチューニング セッションに割り当てられているグローバル一意識別子。
database_name varchar(64) インデックス チューニング セッションの実行元となるコンテキスト提供元のデータベースの名前。
session_type intelligentperformance.recommendation_type このインデックス チューニング セッションで生成される可能性があるレコメンデーションの種類を示します。 CreateIndex および DropIndex のいずれかの値になります。 CreateIndex の種類のセッションでは、CreateIndex の種類のレコメンデーションが生成される可能性があります。 DropIndex の種類のセッションでは、DropIndex または ReIndex の種類のレコメンデーションが生成される可能性があります。
run_type intelligentperformance.recommendation_run_type このセッションが開始された方法を示します。 次のいずれかの値になります。Scheduled index_tuning.analysis_interval の値に従って自動的に実行されたセッションには、実行の種類として Scheduled が割り当てられます。
intelligentperformance.recommendation_state セッションの現在の状態を示します。 指定できる値: ErrorSuccess、および InProgress。 実行に失敗したセッションは、Error として設定されます。 レコメンデーションが生成されたかどうかにかかわらず、実行が正常に完了したセッションは、Success として設定されます。 まだ実行中のセッションは、InProgress として設定されます。
start_time タイムスタンプ (タイムゾーンなし) このレコメンデーションを生成したチューニング セッションが開始されたタイムスタンプ。
stop_time タイムスタンプ (タイムゾーンなし) このレコメンデーションを生成したチューニング セッションが開始されたタイムスタンプ。 セッションが進行中の場合、または何らかの障害が原因で中止された場合は NULL。
recommendations_count integer このセッションで生成されたレコメンデーションの合計数。

intelligentperformance.recommendations

recommendations ビューでは、基になるテーブルでデータを引き続き使用できるチューニング セッションで生成されたすべてのレコメンデーションのすべての詳細が公開されます。

列名 データ型 (data type) 説明
recommendation_id integer サーバー全体でレコメンデーションを一意に識別する番号。
last_known_session_id uuid すべてのインデックス チューニング セッションには、グローバル一意識別子が割り当てられます。 この列の値は、このレコメンデーションを最後に生成したセッションの値を表します。
database_name varchar(64) レコメンデーションが生成されたコンテキストのデータベースの名前。
recommendation_type intelligentperformance.recommendation_type 生成されたレコメンデーションの種類を示します。 指定できる値: CreateIndexDropIndex、および ReIndex
initial_recommended_time タイムスタンプ (タイムゾーンなし) このレコメンデーションを生成したチューニング セッションが開始されたタイムスタンプ。
last_recommended_time タイムスタンプ (タイムゾーンなし) このレコメンデーションを生成したチューニング セッションが開始されたタイムスタンプ。
times_recommended integer このレコメンデーションを生成したチューニング セッションが開始されたタイムスタンプ。
reason text このレコメンデーションが生成された理由を正当である根拠。
recommendation_context json レコメンデーションの影響を受けるクエリのクエリ識別子の一覧、推奨されるインデックスの種類、インデックスが推奨されるスキーマの名前およびテーブルの名前、インデックス列、インデックス名、推奨インデックスの推定サイズ (バイト単位) が含まれます。
インデックスの作成が推奨される理由

インデックス チューニングによって、インデックスを作成するよう推奨される場合、少なくとも次の理由のうち 1 つが追加されます。

理由
Column <column> appear in Join On clause(s) in query <queryId>
Column <column> appear in Equal Predicate clause(s) in query <queryId>
Column <column> appear in Non-Equal Predicate clause(s) in query <queryId>
Column <column> appear in Group By clause(s) in query <queryId>
Column <column> appear in Order By clause(s) in query <queryId>
インデックスの削除が推奨される理由

インデックス チューニングで無効とマークされたインデックスが特定された場合、次の理由で削除することが提案されます。

The index is invalid and the recommended recovery method is to reindex.

インデックスが無効とマークされる理由とタイミングの詳細については、PostgreSQL 公式ドキュメントの「REINDEX」を参照してください。

インデックスの削除が推奨される理由

インデックス チューニングで、index_tuning.unused_min_period で設定した日数以上使用されていないインデックスが検出されると、次の理由で削除することが提案されます。

The index is unused in the past <days_unused> days.

インデックス チューニングで重複するインデックスが検出された場合、どちらか一方が残され、もう一方は削除することが提案されます。 提供される理由は、常に次の文言で始まります。

Duplicate of <surviving_duplicate>.

その後に、各重複が削除対象として選択された理由を説明する別のテキストが続きます。

理由
The equivalent index "<surviving_duplicate>" is a Primary key, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" is a unique index, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" is a constraint, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" is a valid index, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" has been chosen as replica identity, while "<droppable_duplicate>" is not.
The equivalent index "<surviving_duplicate>" was used to cluster the table, while "<droppable_duplicate>" was not.
The equivalent index "<surviving_duplicate>" has a smaller estimated size compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has more tuples compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has more index scans compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has been fetched more times compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has been read more times compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has a shorter length compared to "<droppable_duplicate>".
The equivalent index "<surviving_duplicate>" has a smaller oid compared to "<droppable_duplicate>".

インデックスが重複により削除対象となっているだけでなく、少なくとも index_tuning.unused_min_period で定められた日数にわたって使用されていない場合、理由に次の文言が追加されます。

Also, the index is unused in the past <days_unused> days.

インデックスの推奨事項を適用する

インデックスの推奨事項には、推奨事項を実装するために実行できる SQL ステートメントが含まれています。

次のセクションでは、特定の推奨事項に対してこのステートメントを取得する方法を示します。

ステートメントを作成したら、任意の PostgreSQL クライアントを使用してサーバーに接続し、レコメンデーションを適用できます。

Azure portal の [インデックスのチューニング] ページを使用して SQL ステートメントを取得する

  1. Azure portal にサインインし、Azure Database for PostgreSQL フレキシブル サーバー インスタンスを選択します。

  2. メニューの [インテリジェント パフォーマンス] セクションで [インデックス チューニング] を選択します。

  3. インデックスのチューニングによってレコメンデーションが既に生成されていると仮定して、[インデックスのレコメンデーションの表示] の要約を選択して、使用可能なレコメンデーションの一覧にアクセスします。

    レコメンデーションがある場合の [インデックスのチューニング] ページと、完全な一覧にアクセスする方法を示すスクリーンショット。

  4. レコメンデーションの一覧から、次のいずれかを行います。

    • SQL ステートメントを取得するレコメンデーションの右側にある省略記号を選択し、[SQL スクリプトのコピー] を選択します。

      [インデックスのレコメンデーション] ページから SQL ステートメントをコピーする方法を示すスクリーンショット。

    • または、レコメンデーションの名前を選択してインデックスのレコメンデーションの詳細を表示し、[SQL スクリプト] テキスト ボックスでクリップボードへのコピー アイコンを選択して SQL ステートメントをコピーします。

      [インデックスのレコメンデーションの詳細] ページから SQL ステートメントをコピーする方法を示すスクリーンショット。