Você pode listar as recomendações de ajuste de índice produzidas pelo ajuste de índice em um servidor existente por meio do comando az postgres flexible-server index-tuning list-recommendations .
Para listar todas as recomendações CREATE INDEX, use este comando:
az postgres flexible-server index-tuning list-recommendations \
--resource-group <resource_group> \
--server-name <server> \
--recommendation-type createindex
O comando retorna todas as informações sobre as recomendações CREATE INDEX produzidas pelo ajuste de índice, mostrando algo semelhante à seguinte saída:
[
{
"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"
},
{
.
.
.
}
]
Para listar todas as recomendações DROP INDEX, use este comando:
az postgres flexible-server index-tuning list-recommendations \
--resource-group <resource_group> \
--server-name <server> \
--recommendation-type dropindex
O comando retorna todas as informações sobre as recomendações DROP INDEX produzidas pelo ajuste de índice, mostrando algo semelhante à seguinte saída:
[
{
"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"
}
]
Usando qualquer ferramenta de cliente PostgreSQL de sua preferência:
Conecte-se ao banco de dados azure_sys disponível em seu servidor com qualquer função que tenha permissão para se conectar à instância. Os membros da função public podem fazer a leitura a partir dessas exibições.
Execute consultas na exibição sessions para recuperar os detalhes sobre sessões de recomendação.
Execute consultas no modo de exibiçãorecommendations para recuperar as recomendações produzidas pelo ajuste de índice para CREATE INDEX e DROP INDEX.
Visualizações
As exibições no banco de dados azure_sys oferecem uma maneira conveniente de acessar e recuperar as recomendações de índice geradas pelo ajuste de índice. Especificamente, as exibições createindexrecommendations e dropindexrecommendations contêm informações detalhadas sobre as recomendações CREATE INDEX e DROP INDEX, respectivamente. Essas exibições expõem dados como a ID da sessão, o nome do banco de dados, o tipo de assistente, os horários de início e término da sessão de ajuste, a ID da recomendação, o tipo de recomendação, o motivo da recomendação e outros detalhes relevantes. Ao consultar essas exibições, os usuários podem acessar e analisar facilmente as recomendações de índice produzidas pelo ajuste de índice.
A exibição sessions expõe todos os detalhes de todas as sessões de ajuste de índice.
| nome da coluna |
tipo de dados |
Descrição |
| identificador_da_sessão |
identificador único universal (UUID) |
O identificador globalmente exclusivo atribuído a cada nova sessão de ajuste iniciada. |
| nome_do_banco_de_dados |
varchar(64) |
Nome do banco de dados em cujo contexto a sessão de ajuste de índice foi executada. |
| tipo_de_sessão |
intelligentperformance.recommendation_type |
Indica os tipos de recomendações que essa sessão de ajuste de índice pode produzir. Os valores possíveis são os seguintes: CreateIndex, DropIndex. Sessões do tipo CreateIndex podem produzir recomendações de tipo CreateIndex. Sessões do tipo DropIndex podem produzir recomendações dos tipos DropIndex ou ReIndex. |
| tipo_de_execução |
intelligentperformance.recommendation_run_type |
Indica a maneira como essa sessão foi iniciada. Os valores possíveis são: Scheduled. As sessões executadas automaticamente de acordo com o valor de index_tuning.analysis_interval, recebem um tipo de execução de Scheduled. |
| estado |
intelligentperformance.recommendation_state |
Indica o estado atual da sessão. Os valores possíveis são: Error, Success, InProgress. As sessões cuja execução falhou são definidas como Error. As sessões que concluíram a execução corretamente, independentemente de terem gerado ou não recomendações, são definidas como Success. As sessões que ainda estão em execução são definidas como InProgress. |
| hora de início |
marca temporal sem fuso horário |
Carimbo de data/hora em que a sessão de ajuste que produziu essa recomendação foi iniciada. |
| tempo_de_parada |
marca temporal sem fuso horário |
Carimbo de data/hora em que a sessão de ajuste que produziu essa recomendação foi iniciada. NULL se a sessão estiver em andamento ou tiver sido abortada devido a alguma falha. |
| numero_de_recomendacoes |
inteiro |
Número total de recomendações produzidas nesta sessão. |
A exibição recommendations expõe todos os detalhes de todas as recomendações geradas em qualquer sessão de ajuste cujos dados ainda estejam disponíveis nas tabelas subjacentes.
| nome da coluna |
tipo de dados |
Descrição |
| recommendation_id |
inteiro |
Número que identifica exclusivamente uma recomendação em todo o servidor. |
| last_known_session_id |
identificador único universal (UUID) |
Cada sessão de ajuste de índice recebe um Identificador Globalmente Exclusivo. O valor nesta coluna representa o da sessão que mais recentemente produziu essa recomendação. |
| nome_do_banco_de_dados |
varchar(64) |
Nome do banco de dados em cujo contexto foi produzida a recomendação. |
| tipo_de_recomendação |
intelligentperformance.recommendation_type |
Indica o tipo da recomendação produzida. Os valores possíveis são: CreateIndex, DropIndex, ReIndex. |
| tempo_recomendado_inicial |
marca temporal sem fuso horário |
Carimbo de data/hora em que a sessão de ajuste que produziu essa recomendação foi iniciada. |
| último_horário_recomendado |
marca temporal sem fuso horário |
Carimbo de data/hora em que a sessão de ajuste que produziu essa recomendação foi iniciada. |
| times_recommended |
inteiro |
Carimbo de data/hora em que a sessão de ajuste que produziu essa recomendação foi iniciada. |
| reason |
enviar SMS |
Motivo que justifica por que essa recomendação foi produzida. |
| contexto_de_recomendação |
json |
Contém a lista de identificadores de consulta para as consultas afetadas pela recomendação, o tipo de índice que está sendo recomendado, o nome do esquema e o nome da tabela na qual o índice está sendo recomendado, as colunas de índice, o nome do índice e o tamanho estimado em bytes do índice recomendado. |
Motivos para criar recomendações de índice
Quando o ajuste de índice recomenda a criação de um índice, ele adiciona pelo menos um dos seguintes motivos:
| Motivo |
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> |
Motivos para criar recomendações de remoção de índice
Quando o ajuste de índice identifica todos os índices marcados como inválidos, ele propõe removê-lo com o seguinte motivo:
The index is invalid and the recommended recovery method is to reindex.
Para saber mais sobre por que e quando os índices são marcados como inválidos, consulte a documentação oficial REINDEX no PostgreSQL.
Motivos para criar recomendações de remoção de índice
Quando o ajuste de índice detecta um índice que não é usado para, pelo menos, o número de dias definido em index_tuning.unused_min_period, ele propõe removê-lo com o seguinte motivo:
The index is unused in the past <days_unused> days.
Quando o ajuste de índice detecta índices duplicados, uma das cópias sobrevive, e o sistema propõe remover os restantes. O motivo fornecido sempre tem o seguinte texto inicial:
Duplicate of <surviving_duplicate>.
Em seguida, outro texto explica o motivo pelo qual cada uma das duplicatas foi escolhida para descarte:
| Motivo |
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>". |
Se o índice não só for removível devido à duplicação, mas também não for usado para, pelo menos, o número de dias definido em index_tuning.unused_min_period, o seguinte texto será acrescentado ao motivo:
Also, the index is unused in the past <days_unused> days.