Zalecenia dotyczące dostrajania indeksów utworzone przez dostrajanie indeksów można wyświetlić na istniejącym serwerze za pomocą polecenia az postgres flexible-server index-tuning list-recommendations .
Aby wyświetlić listę wszystkich zaleceń CREATE INDEX, użyj następującego polecenia:
az postgres flexible-server index-tuning list-recommendations \
--resource-group <resource_group> \
--server-name <server> \
--recommendation-type createindex
Polecenie zwraca wszystkie informacje o zaleceniach CREATE INDEX generowanych przez dostrajanie indeksu, pokazując coś podobnego do następujących danych wyjściowych:
[
{
"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"
},
{
.
.
.
}
]
Aby wyświetlić listę wszystkich zaleceń DOTYCZĄCYCH INDEKSU DROP, użyj następującego polecenia:
az postgres flexible-server index-tuning list-recommendations \
--resource-group <resource_group> \
--server-name <server> \
--recommendation-type dropindex
Polecenie zwraca wszystkie informacje o zaleceniach dotyczących indeksu DROP utworzonych przez dostrajanie indeksu, pokazując coś podobnego do następujących danych wyjściowych:
[
{
"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"
}
]
Korzystając z dowolnego narzędzia klienckiego PostgreSQL według uznania:
Połącz się z bazą danych azure_sys dostępną na twoim serwerze, korzystając z dowolnej roli posiadającej uprawnienia do nawiązania połączenia z wystąpieniem. Członkowie roli public mogą czytać z tych widoków.
Wykonaj zapytania w widoku sessions aby pobrać szczegółowe informacje o sesjach rekomendacji.
Aby pobrać zalecenia generowane przez dostrajanie indeksu dotyczące poleceń CREATE INDEX i DROP INDEX, wykonaj zapytania w widoku recommendations.
Widoki
Widoki w azure_sys bazie danych zapewniają wygodny sposób uzyskiwania dostępu do zaleceń dotyczących indeksów generowanych przez dostrajanie indeksów i pobierania ich. W szczególności widoki createindexrecommendations i dropindexrecommendations zawierają szczegółowe informacje o zaleceniach dotyczących CREATE INDEX i DROP INDEX, odpowiednio. Te widoki uwidaczniają dane, takie jak identyfikator sesji, nazwa bazy danych, typ klasyfikatora, czas uruchamiania i zatrzymywania sesji dostrajania, identyfikator rekomendacji, typ rekomendacji, przyczyna rekomendacji i inne istotne szczegóły. Użytkownicy mogą wykonywać zapytania dotyczące tych widoków, aby łatwo uzyskiwać dostęp do zaleceń dotyczących indeksów generowanych przez dostrajanie indeksów i analizować je.
Widok sessions uwidacznia wszystkie szczegóły wszystkich sesji dostrajania indeksu.
| nazwa kolumny |
typ danych |
opis |
| session_id |
uuid (uniwersalny unikalny identyfikator) |
Globalnie unikatowy identyfikator przypisany do każdej nowej sesji dostrajania zainicjowanej. |
| nazwa_bazy_danych |
varchar(64) |
Nazwa bazy danych, w kontekście której została wykonana sesja dostrajania indeksu. |
| typ_sesji |
inteligentna_wydajność.typ_rekomendacji |
Wskazuje typy zaleceń, które może wygenerować ta sesja dostrajania indeksu. Możliwe wartości to: CreateIndex, DropIndex. Sesje typu CreateIndex mogą generować rekomendacje typu CreateIndex. Sesje typu DropIndex mogą generować zalecenia typu DropIndex lub ReIndex. |
| typ_uruchomienia |
typ_uruchomienia_rekomendacji_wydajności_inteligentnej |
Wskazuje sposób inicjowania tej sesji. Możliwe wartości to: Scheduled. Sesje wykonywane automatycznie zgodnie z wartością index_tuning.analysis_interval są przypisywane do typu przebiegu Scheduled. |
| stan |
stan rekomendacji wydajności |
Wskazuje bieżący stan sesji. Możliwe wartości to: Error, , SuccessInProgress. Sesje, których wykonanie nie powiodło się, są ustawione jako Error. Sesje, które zakończyły się prawidłowym wykonaniem, niezależnie od tego, czy wygenerowały zalecenia, są ustawione jako Success. Sesje, które nadal są wykonywane, są ustawione jako InProgress. |
| czas_startu |
znacznik czasu bez strefy czasowej |
Sygnatura czasowa, w której uruchomiono sesję dostrajania, która wyprodukowała to zalecenie. |
| czas_zatrzymania |
znacznik czasu bez strefy czasowej |
Sygnatura czasowa, w której uruchomiono sesję dostrajania, która wyprodukowała to zalecenie. Wartość NULL, jeśli sesja jest w toku lub została przerwana z powodu awarii. |
| liczba_rekomendacji |
liczba całkowita |
Łączna liczba zaleceń utworzonych w tej sesji. |
Widok recommendations uwidacznia wszystkie szczegóły wszystkich zaleceń wygenerowanych w każdej sesji dostrajania, której dane są nadal dostępne w tabelach bazowych.
| nazwa kolumny |
typ danych |
opis |
| rekomendacja_id |
liczba całkowita |
Numer, który jednoznacznie identyfikuje zalecenie na całym serwerze. |
| ostatni_zapamiętany_identyfikator_sesji |
uuid (uniwersalny unikalny identyfikator) |
Każda sesja dostrajania indeksu ma przypisany unikatowy identyfikator globalny. Wartość w tej kolumnie reprezentuje sesję, która ostatnio wygenerowała to zalecenie. |
| nazwa_bazy_danych |
varchar(64) |
Nazwa bazy danych, w kontekście której została wygenerowana rekomendacja. |
| typ_rekomendacji |
inteligentna_wydajność.typ_rekomendacji |
Wskazuje typ wygenerowanej rekomendacji. Możliwe wartości to: CreateIndex, , DropIndexReIndex. |
| początkowy_zalecany_czas |
znacznik czasu bez strefy czasowej |
Sygnatura czasowa, w której uruchomiono sesję dostrajania, która wyprodukowała to zalecenie. |
| ostatni_czas_rekomendacji |
znacznik czasu bez strefy czasowej |
Sygnatura czasowa, w której uruchomiono sesję dostrajania, która wyprodukowała to zalecenie. |
| ilość_poleceń |
liczba całkowita |
Sygnatura czasowa, w której uruchomiono sesję dostrajania, która wyprodukowała to zalecenie. |
| powód |
SMS |
Powód uzasadniający, dlaczego to zalecenie zostało wygenerowane. |
| kontekst rekomendacji |
JSON |
Zawiera listę identyfikatorów zapytań dla zapytań, których dotyczy zalecenie, typ zalecanego indeksu, nazwę schematu i nazwę tabeli, na której jest zalecany indeks, kolumny indeksu, nazwę indeksu i szacowany rozmiar w bajtach zalecanego indeksu. |
Przyczyny tworzenia rekomendacji dotyczących indeksów
Gdy dostrajanie indeksu zaleca utworzenie indeksu, podaje co najmniej jeden z następujących powodów:
| Przyczyna |
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> |
Przyczyny porzucania zaleceń dotyczących indeksu
Gdy dostrajanie indeksu identyfikuje wszystkie indeksy oznaczone jako nieprawidłowe, proponuje usunięcie go z następującym powodem:
The index is invalid and the recommended recovery method is to reindex.
Aby dowiedzieć się więcej o tym, dlaczego i kiedy indeksy są oznaczone jako nieprawidłowe, zapoznaj się z oficjalną dokumentacją REINDEX w usłudze PostgreSQL.
Przyczyny porzucania zaleceń dotyczących indeksu
Gdy dostrajanie indeksu wykryje indeks, który jest nieużywany przez co najmniej liczbę dni ustawionych w elemencie index_tuning.unused_min_period, proponuje usunięcie go z następującej przyczyny:
The index is unused in the past <days_unused> days.
Gdy dostrajanie indeksu wykrywa zduplikowane indeksy, jedna z duplikatów przetrwa i proponuje usunięcie pozostałych indeksów. Podany powód zawsze zawiera następujący tekst początkowy:
Duplicate of <surviving_duplicate>.
Następujący tekst wyjaśnia przyczynę, dla której każdy z duplikatów został wybrany do usunięcia.
| Przyczyna |
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>". |
Jeśli indeks nie tylko jest usuwalny z powodu duplikacji, ale także nieużywany przez co najmniej ustawioną liczbę dni w index_tuning.unused_min_period, następujący tekst jest dołączany do przyczyny.
Also, the index is unused in the past <days_unused> days.