Pomocí příkazu az postgres flexible-server index-tuning list-recommendations můžete zobrazit seznam doporučení pro ladění indexů vytvořených na existujícím serveru.
Pokud chcete zobrazit seznam všech doporučení CREATE INDEX, použijte tento příkaz:
az postgres flexible-server index-tuning list-recommendations \
--resource-group <resource_group> \
--server-name <server> \
--recommendation-type createindex
Příkaz vrátí všechny informace o doporučeních CREATE INDEX vytvořených laděním indexu, které ukazuje něco podobného jako následující výstup:
[
{
"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"
},
{
.
.
.
}
]
Pokud chcete zobrazit seznam všech doporučení DROP INDEXu, použijte tento příkaz:
az postgres flexible-server index-tuning list-recommendations \
--resource-group <resource_group> \
--server-name <server> \
--recommendation-type dropindex
Příkaz vrátí všechny informace o doporučeních DROP INDEX vytvořených laděním indexu, což ukazuje něco podobného jako v následujícím výstupu:
[
{
"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"
}
]
Použití libovolného klientského nástroje PostgreSQL podle vašich preferencí:
Připojte se k azure_sys databázi dostupné na vašem serveru s libovolnou rolí, která má oprávnění k připojení k instanci. Členové role public mohou číst tyto zobrazení.
Spusťte dotazy na zobrazení sessions pro načtení podrobností o relacích s doporučeními.
Spusťte dotazy na pohledu recommendations abyste získali doporučení poskytnutá laděním indexu pro CREATE INDEX a DROP INDEX.
Zobrazení
Zobrazení v azure_sys databázi poskytují pohodlný způsob, jak přistupovat k doporučením indexů generovaným laděním indexů a je načítat. Konkrétně zobrazení createindexrecommendations a dropindexrecommendations obsahují podrobné informace o doporučeních CREATE INDEX a DROP INDEX, respektive. Tato zobrazení zveřejňují data, jako je ID relace, název databáze, typ poradce, časy spuštění a zastavení relace ladění, ID doporučení, typ doporučení, důvod doporučení a další relevantní podrobnosti. Uživatelé se můžou na tato zobrazení dotazovat, aby mohli snadno přistupovat k doporučením indexu vytvořeným laděním indexů a analyzovat je.
Zobrazení sessions zveřejňuje všechny podrobnosti pro všechny relace ladění indexu.
| název sloupce |
datový typ |
Popis |
| identifikátor_sezení |
Univerzální jednoznačný identifikátor (UUID) |
Globálně jedinečný identifikátor přiřazený ke každé nové relaci ladění, která se zahájí. |
| název databáze |
varchar(64) |
Název databáze, v jejímž kontextu byla spuštěna seance ladění indexu. |
| session_type |
inteligentnívýkon.typ_doporučení |
Označuje typy doporučení, která by mohla tato relace ladění indexu vytvořit. Možné hodnoty jsou: CreateIndex, DropIndex. Sezení typu CreateIndex mohou vytvářet doporučení typu CreateIndex. Relace typu DropIndex mohou vytvářet doporučení typu DropIndex nebo ReIndex. |
| typ_spuštění |
intelligentní výkonový doporučený typ spuštění |
Označuje způsob, jakým byla tato relace zahájena. Možné hodnoty jsou: Scheduled. Relace se automaticky provádějí podle hodnoty index_tuning.analysis_interval, a je jim přiřazen typ spuštění Scheduled. |
| stav |
intelligentnívýkon.stav_doporučení |
Označuje aktuální stav relace. Možné hodnoty jsou: Error, Success, InProgress. Relace, jejichž spuštění selhalo, jsou označeny jako Error. Sezení, která správně dokončila provádění, bez ohledu na to, zda vygenerovala doporučení, jsou nastavena na Success. Relace, které se stále spouští, jsou nastaveny jako InProgress. |
| čas začátku |
časové razítko bez časového pásma |
Časové razítko, ve kterém byla spuštěna relace ladění, která toto doporučení vytvořila. |
| čas zastavení |
časové razítko bez časového pásma |
Časové razítko, ve kterém byla spuštěna relace ladění, která toto doporučení vytvořila. Hodnota NULL, v případě, že probíhá relace, nebo pokud byla přerušena kvůli nějakému selhání. |
| počet doporučení |
integer |
Celkový počet doporučení vytvořených v této relaci |
Zobrazení recommendations zveřejňuje všechny podrobnosti pro všechna doporučení vygenerovaná v jakékoli relaci ladění, jejíž data jsou stále k dispozici v podkladových tabulkách.
| název sloupce |
datový typ |
Popis |
| identifikátor_doporučení |
integer |
Číslo, které jednoznačně identifikuje doporučení na celém serveru. |
| last_known_session_id |
Univerzální jednoznačný identifikátor (UUID) |
Každá relace ladění indexu má přiřazený globálně jedinečný identifikátor. Hodnota v tomto sloupci představuje hodnotu poslední relace, která vytvořila toto doporučení. |
| název databáze |
varchar(64) |
Název databáze, ve které byl vytvořen kontext doporučení. |
| typ_doporučení |
inteligentnívýkon.typ_doporučení |
Označuje typ vytvořeného doporučení. Možné hodnoty jsou: CreateIndex, DropIndex, ReIndex. |
| počáteční doporučený čas |
časové razítko bez časového pásma |
Časové razítko, ve kterém byla spuštěna relace ladění, která toto doporučení vytvořila. |
| poslední_doporučený_čas |
časové razítko bez časového pásma |
Časové razítko, ve kterém byla spuštěna relace ladění, která toto doporučení vytvořila. |
| počet_doporučení |
integer |
Časové razítko, ve kterém byla spuštěna relace ladění, která toto doporučení vytvořila. |
| důvod |
poslat SMS |
Důvod odůvodnění, proč bylo toto doporučení vytvořeno. |
| kontext_doporučení |
JSON |
Obsahuje seznam identifikátorů dotazů pro dotazy ovlivněné doporučením, typ doporučeného indexu, název schématu a název tabulky, pro kterou se index doporučuje, sloupce indexu, název indexu a odhadovanou velikost v bajtech doporučeného indexu. |
Důvody pro vytvoření doporučení indexu
Když ladění indexu doporučuje vytvoření indexu, přidá alespoň jeden z následujících důvodů:
| Důvod |
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> |
Důvody pro vyřazení doporučení indexu
Při ladění indexu se identifikují všechny indexy, které jsou označené jako neplatné, navrhuje je odstranit z následujícího důvodu:
The index is invalid and the recommended recovery method is to reindex.
Další informace o tom, proč a kdy jsou indexy označené jako neplatné, najdete v oficiální dokumentaci k REINDEX v PostgreSQL.
Důvody pro vyřazení doporučení indexu
Při ladění indexu zjistí index, který nebyl používán alespoň po počet dnů nastavený v index_tuning.unused_min_period, navrhuje jeho odstranění z následujícího důvodu:
The index is unused in the past <days_unused> days.
Když ladění indexu zjistí duplicitní indexy, jeden z duplicit přežije a navrhne vyřazení zbývajících indexů. Zadaný důvod má vždy následující počáteční text:
Duplicate of <surviving_duplicate>.
Následuje další text, který vysvětluje důvod, proč byly vybrány jednotlivé duplicity pro odstranění:
| Důvod |
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>". |
Pokud je index nejen odstranitelný z důvodu duplikace, ale také není využíván po dobu alespoň počtu dnů nastavených v index_tuning.unused_min_period, k důvodu se připojí následující text:
Also, the index is unused in the past <days_unused> days.