Azure Database for PostgreSQL - フレキシブル サーバーのインデックス チューニングで生成されるインデックスのレコメンデーションを使用する
インデックス チューニングでは、azure_sys
データベース内の intelligentperformance
スキーマにある一連のテーブルで作成されるレコメンデーションが保持されます。
現時点では、この情報は、この目的のために Azure portal ページ ビルドを使用するか、クエリを実行して azure_sys
データベースの intelligent performance
内で使用可能な 2 つのビューからデータを取得することで読み取ることができます。
Azure portal を使用してインデックスのレコメンデーションを使用する
Azure portal にサインインし、Azure Database for PostgreSQL フレキシブル サーバー インスタンスを選択します。
メニューの [インテリジェント パフォーマンス] セクションで [インデックス チューニング] を選択します。
使用可能なレコメンデーションがある場合は、[インデックスのレコメンデーション表示] の要約を選択して、完全な一覧にアクセスします。
この一覧には、使用可能なすべてのレコメンデーションと、それぞれの詳細が表示されます。 既定では、一覧は [最終レコメンデーション] (降順) で並べ替えられます。一番上に最新のレコメンデーションが表示されます。 ただし、他の列で並べ替え、フィルター ボックスを使用することで、表示される項目の一覧を、データベース名、スキーマ名、またはテーブル名に指定されたテキストが含まれている項目に絞り込むことができます。
特定のレコメンデーションに関する詳細情報を表示するには、そのレコメンデーションの名前を選択すると、画面の右側に [インデックスのレコメンデーションの詳細] ウィンドウが開き、そのレコメンデーションに関して使用可能なすべての詳細が表示されます。
azure_sys データベースで使用可能なビューを使用してインデックスのレコメンデーションを使用する
- インスタンスに接続するためのアクセス許可を持つ任意のロールを使用して、サーバーで使用可能な
azure_sys
データベースに接続します。public
ロールのメンバーは、これらのビューから読み取ることができます。 sessions
ビューでクエリを実行して、レコメンデーション セッションに関する詳細を取得します。- 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 | セッションの現在の状態を示します。 指定できる値: Error 、Success 、および 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 | 生成されたレコメンデーションの種類を示します。 指定できる値: CreateIndex 、DropIndex 、および 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 ステートメントを取得する
Azure portal にサインインし、Azure Database for PostgreSQL フレキシブル サーバー インスタンスを選択します。
メニューの [インテリジェント パフォーマンス] セクションで [インデックス チューニング] を選択します。
インデックスのチューニングによってレコメンデーションが既に生成されていると仮定して、[インデックスのレコメンデーションの表示] の要約を選択して、使用可能なレコメンデーションの一覧にアクセスします。
レコメンデーションの一覧から、次のいずれかを行います。
関連するコンテンツ
- 。Azure Database for PostgreSQL - フレキシブル サーバーでのインデックス チューニング。
- Azure Database for PostgreSQL - フレキシブル サーバーでインデックス チューニングを構成する。
- クエリ ストアによるパフォーマンスの監視。
- クエリ ストアの使用シナリオ - Azure Database for PostgreSQL - フレキシブル サーバー。
- クエリ ストアのベスト プラクティス - Azure Database for PostgreSQL - フレキシブル サーバー。
- Azure Database for PostgreSQL - フレキシブル サーバーの Query Performance Insight。