Você pode listar 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 do í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 azure_sys banco de dados 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 ler a partir destas vistas.
Execute consultas na sessions vista para recuperar os detalhes sobre sessões de recomendação.
Execute consultas na recommendations vista para recuperar as recomendações produzidas pelo ajuste de índice para criar índice e eliminar índice.
Visualizações
As visualizações no azure_sys banco de dados fornecem uma maneira conveniente de acessar e recuperar recomendações de índice geradas pelo ajuste do índice. Especificamente, as visualizaçõ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 o ID da sessão, o nome do banco de dados, o tipo de orientador, os horários de início e de parada da sessão de ajuste, o ID da recomendação, o tipo de recomendação, o motivo da recomendação e outros detalhes relevantes. Os usuários podem consultar essas visualizações para acessar e analisar facilmente as recomendações de índice produzidas pelo ajuste do índice.
A sessions visualização expõe todos os detalhes de todas as sessões de otimização de índices.
| nome da coluna |
tipo de dados |
Descrição |
| identificador_de_sessão |
Identificador Único Universal (UUID) |
Identificador Exclusivo Global atribuído a cada nova sessão de ajuste iniciada. |
| nome_da_base_de_dados |
Varchar(64) |
Nome do banco de dados em cujo contexto a sessão de ajuste de índice foi executada. |
| session_type (tipo_de_sessão) |
desempenhointeligente.tiposderecomendação |
Indica os tipos de recomendações que esta sessão de ajuste de índice pode produzir. Os valores possíveis são: CreateIndex, DropIndex. Sessões do CreateIndex tipo podem produzir recomendações do CreateIndex tipo. Sessões de tipos DropIndex podem produzir recomendações de tipos DropIndex ou ReIndex. |
| tipo_de_execução |
inteligentperformance.tipo_de_execução_recomendação |
Indica a forma como esta sessão foi iniciada. Os valores possíveis são: Scheduled. Às sessões executadas automaticamente de acordo com o valor de index_tuning.analysis_interval, é atribuído um tipo de execução de Scheduled. |
| estado |
desempenhointeligente.estado_de_recomendacao |
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 sua execução corretamente, quer tenham gerado recomendações ou não, são definidas como Success. As sessões que ainda estão em execução são definidas como InProgress. |
| hora de início |
carimbo de data/hora sem fuso horário |
Carimbo de data/hora no qual a sessão de ajuste que produziu essa recomendação foi iniciada. |
| tempo_de_paragem |
carimbo de data/hora sem fuso horário |
Carimbo de data/hora no qual 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. |
| contagem_de_recomendações |
número inteiro |
Número total de recomendações produzidas nesta sessão. |
A vista recommendations expõe todos os detalhes de todas as recomendações geradas em qualquer sessão de afinação cujos dados ainda estiverem disponíveis nas tabelas subjacentes.
| nome da coluna |
tipo de dados |
Descrição |
| id_recomendação |
número inteiro |
Número que identifica exclusivamente uma recomendação em todo o servidor. |
| último_ID_de_sessão_conhecida |
Identificador Único Universal (UUID) |
A cada sessão de ajuste de índice é atribuído um Identificador Global Exclusivo. O valor desta coluna representa o da sessão que mais recentemente produziu esta recomendação. |
| nome_da_base_de_dados |
Varchar(64) |
Nome da base de dados em cujo contexto foi produzida a recomendação. |
| tipo_de_recomendação |
desempenhointeligente.tiposderecomendação |
Indica o tipo de recomendação produzida. Os valores possíveis são: CreateIndex, DropIndex, ReIndex. |
| tempo_inicial_recomendado |
carimbo de data/hora sem fuso horário |
Carimbo de data/hora no qual a sessão de ajuste que produziu essa recomendação foi iniciada. |
| último_tempo_recomendado |
carimbo de data/hora sem fuso horário |
Carimbo de data/hora no qual a sessão de ajuste que produziu essa recomendação foi iniciada. |
| vezes_recomendadas |
número inteiro |
Carimbo de data/hora no qual a sessão de ajuste que produziu essa recomendação foi iniciada. |
| razão |
enviar SMS |
Razões que justificam a elaboração desta recomendação. |
| contexto_recomendação |
Json |
Contém a lista de identificadores de consulta para as consultas afetadas pela recomendação, o tipo de índice 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. |
Razões 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:
| Razão |
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> |
Razões para recomendações de queda do índice
Quando o ajuste de índice identifica quaisquer índices marcados como inválidos, ele propõe eliminá-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 o REINDEX na documentação oficial do PostgreSQL.
Razões para recomendações de queda do índice
Quando o ajuste de índice deteta um índice que não é usado por, pelo menos, o número de dias definido em index_tuning.unused_min_period, ele propõe descartá-lo com o seguinte motivo:
The index is unused in the past <days_unused> days.
Quando o ajuste de índice deteta índices duplicados, um dos duplicados sobrevive e propõe descartar o restante. O motivo fornecido tem sempre o seguinte texto inicial:
Duplicate of <surviving_duplicate>.
Seguido de outro texto que explica o motivo da escolha de cada duplicata para exclusão.
| Razão |
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 a duplicação, mas também não for utilizado durante, pelo menos, o número de dias definido em index_tuning.unused_min_period, o seguinte texto é anexado ao motivo:
Also, the index is unused in the past <days_unused> days.