az postgres flexible-server index-tuning list-recommendations コマンドを使用して、既存のサーバーでインデックスチューニングによって生成されるインデックス調整の推奨事項を一覧表示できます。
すべての CREATE INDEX の推奨事項を一覧表示するには、次のコマンドを使用します。
az postgres flexible-server index-tuning list-recommendations \
--resource-group <resource_group> \
--server-name <server> \
--recommendation-type createindex
このコマンドは、インデックスのチューニングによって生成された CREATE INDEX の推奨事項に関するすべての情報を返します。次のような出力が表示されます。
[
{
"analyzedWorkload": {
"endTime": "2025-02-26T14:40:18.788628+00:00",
"queryCount": 18,
"startTime": "2025-02-26T13:40:18.788628+00:00"
},
"details": {
"databaseName": "<database>",
"includedColumns": "",
"indexColumns": "\"<table>\".\"<column>\"",
"indexName": "<index>",
"indexType": "BTREE",
"schema": "<schema>",
"table": "<table>"
},
"estimatedImpact": [
{
"absoluteValue": 0.3984375,
"dimensionName": "IndexSize",
"queryId": null,
"unit": "MB"
},
{
"absoluteValue": 62.86969111969111,
"dimensionName": "QueryCostImprovement",
"queryId": -555955670159268890,
"unit": "Percentage"
}
],
"id": "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.DBforPostgreSQL/flexibleServers/<server>/tuningOptions/index/recommendations/<recommendation_id>",
"implementationDetails": {
"method": "SQL",
"script": "create index concurrently <index> on <schema>.<table>(<column>)"
},
"improvedQueryIds": [
-555955670159268890
],
"initialRecommendedTime": "2025-02-26T14:40:19.707617+00:00",
"kind": "",
"lastRecommendedTime": "2025-02-26T14:40:19.707617+00:00",
"name": "CreateIndex_<database>_<schema>_<column>_idx",
"recommendationReason": "Column \"<table>\".\"<column>\" appear in Equal Predicate clause(s) in query -555955670159268890;",
"recommendationType": "CreateIndex",
"resourceGroup": "<resource_group>",
"systemData": null,
"timesRecommended": 1,
"type": "Microsoft.DBforPostgreSQL/flexibleServers/tuningOptions/index"
},
{
.
.
.
}
]
DROP INDEX のすべての推奨事項を一覧表示するには、次のコマンドを使用します。
az postgres flexible-server index-tuning list-recommendations \
--resource-group <resource_group> \
--server-name <server> \
--recommendation-type dropindex
このコマンドは、インデックスのチューニングによって生成された DROP INDEX の推奨事項に関するすべての情報を返します。次のような出力が表示されます。
[
{
"analyzedWorkload": {
"endTime": "2025-02-26T19:02:47.522193+00:00",
"queryCount": 0,
"startTime": "2025-01-22T19:02:47.522193+00:00"
},
"details": {
"databaseName": "<database>",
"includedColumns": "",
"indexColumns": "<column>",
"indexName": "<index>",
"indexType": "BTREE",
"schema": "<schema>",
"table": "<table>"
},
"estimatedImpact": [
{
"absoluteValue": 35.0,
"dimensionName": "Benefit",
"queryId": null,
"unit": "Percentage"
},
{
"absoluteValue": 31.28125,
"dimensionName": "IndexSize",
"queryId": null,
"unit": "MB"
}
],
"id": "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.DBforPostgreSQL/flexibleServers/<server>/tuningOptions/index/recommendations/<recommendation_id>",
"implementationDetails": {
"method": "SQL",
"script": "drop index concurrently \"<schema>\".\"<index>\";"
},
"improvedQueryIds": null,
"initialRecommendedTime": "2025-02-26T19:02:47.556792+00:00",
"kind": "",
"lastRecommendedTime": "2025-02-26T19:02:47.556792+00:00",
"name": "DropIndex_<database>_<sechema>_<index>",
"recommendationReason": "Duplicate of \"<index>\". The equivalent index \"<index>\" has a shorter length compared to \"<index>\".",
"recommendationType": "DropIndex",
"resourceGroup": "<resource_group>",
"systemData": null,
"timesRecommended": 1,
"type": "Microsoft.DBforPostgreSQL/flexibleServers/tuningOptions/index"
}
]
任意の PostgreSQL クライアント ツールを使用する。
インスタンスに接続するためのアクセス許可を持つ任意のロールを使用して、サーバーで使用可能な azure_sys
データベースに接続します。 public
ロールのメンバーは、これらのビューから読み取ることができます。
sessions
ビューでクエリを実行して、レコメンデーション セッションに関する詳細を取得します。
CREATE INDEX と DROP INDEX のインデックス チューニングによって生成されたレコメンデーションを取得するには、recommendations
ビューに対してクエリを実行します。
ビュー
azure_sys
データベース内のビューは、インデックスのチューニングによって生成されたインデックスのレコメンデーションにアクセスして取得する便利な方法を提供します。 具体的には、createindexrecommendations
および dropindexrecommendations
ビューにはそれぞれ、CREATE INDEX と DROP INDEX のレコメンデーションに関する詳細情報が含まれています。 これらのビューでは、セッション ID、データベース名、アドバイザーの種類、チューニング セッションの開始時刻と停止時間、レコメンデーション ID、レコメンデーションの種類、レコメンデーションの理由、その他の関連する詳細などのデータが公開されます。 ユーザーは、これらのビューに対してクエリを実行して、インデックスのチューニングによって生成されたインデックスの推奨事項に簡単にアクセスして分析できます。
sessions
ビューには、すべてのインデックス チューニング セッションのすべての詳細が公開されます。
列名 |
データ型 (data type) |
説明 |
セッションID |
UUID(ユニバーサルユニーク識別子) |
開始された新しいチューニング セッションごとに割り当てられるグローバルな唯一の識別子。 |
データベース名 |
varchar(64) |
インデックス チューニング セッションの実行元となるコンテキスト提供元のデータベースの名前。 |
セッションタイプ |
インテリジェントパフォーマンス推奨タイプ |
このインデックス チューニング セッションで生成される可能性があるレコメンデーションの種類を示します。 CreateIndex および DropIndex のいずれかの値になります。 CreateIndex の種類のセッションでは、CreateIndex の種類のレコメンデーションが生成される可能性があります。 DropIndex の種類のセッションでは、DropIndex または ReIndex の種類のレコメンデーションが生成される可能性があります。 |
実行タイプ |
インテリジェントパフォーマンス.推奨実行タイプ |
このセッションが開始された方法を示します。 次のいずれかの値になります。Scheduled index_tuning.analysis_interval の値に従って自動的に実行されたセッションには、実行の種類として Scheduled が割り当てられます。 |
状態 |
intelligentperformance.recommendation_state |
セッションの現在の状態を示します。 指定できる値: Error 、Success 、および InProgress 。 実行に失敗したセッションは、Error として設定されます。 レコメンデーションが生成されたかどうかにかかわらず、実行が正常に完了したセッションは、Success として設定されます。 まだ実行中のセッションは、InProgress として設定されます。 |
開始時間 |
タイムスタンプ (タイムゾーンなし) |
このレコメンデーションを生成したチューニング セッションが開始されたタイムスタンプ。 |
stop_time |
タイムスタンプ (タイムゾーンなし) |
このレコメンデーションを生成したチューニング セッションが開始されたタイムスタンプ。 セッションが進行中の場合、または何らかの障害が原因で中止された場合は NULL。 |
recommendations_count |
整数 |
このセッションで生成されたレコメンデーションの合計数。 |
recommendations
ビューでは、基になるテーブルにまだデータが残されているチューニング セッションで生成されたすべてのレコメンデーションの詳細をすべて公開します。
列名 |
データ型 (data type) |
説明 |
レコメンデーションID |
整数 |
サーバー全体でレコメンデーションを一意に識別する番号。 |
最終確認されたセッションID |
UUID(ユニバーサルユニーク識別子) |
すべてのインデックス チューニング セッションには、グローバルユニーク識別子が割り当てられます。 この列の値は、このレコメンデーションを最後に生成したセッションの値を表します。 |
データベース名 |
varchar(64) |
レコメンデーションが生成されたコンテキストのデータベースの名前。 |
推奨タイプ |
インテリジェントパフォーマンス.推奨タイプ |
生成されたレコメンデーションの種類を示します。 指定できる値: CreateIndex 、DropIndex 、および ReIndex 。 |
初期推奨時間 |
タイムスタンプ (タイムゾーンなし) |
このレコメンデーションを生成したチューニング セッションが開始されたタイムスタンプ。 |
最後の推奨時間 |
タイムスタンプ (タイムゾーンなし) |
このレコメンデーションを生成したチューニング セッションが開始されたタイムスタンプ。 |
推奨回数 |
整数 |
このレコメンデーションを生成したチューニング セッションが開始されたタイムスタンプ。 |
理由 |
テキスト |
このレコメンデーションが生成された理由を正当化する根拠。 |
推薦コンテキスト |
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.