Вы можете перечислить рекомендации по настройке индекса, созданные с помощью настройки индекса на существующем сервере, с помощью команды 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
, чтобы получить сведения о сеансах рекомендаций.
Выполните запросы в recommendations
представлении, чтобы получить рекомендации, созданные с помощью настройки индекса для CREATE INDEX и DROP INDEX.
Представления
Представления в azure_sys
базе данных предоставляют удобный способ доступа к рекомендациям по индексу, созданным при настройке индекса. В частности, представления содержат createindexrecommendations
подробные dropindexrecommendations
сведения о рекомендациях CREATE INDEX и DROP INDEX соответственно. Эти представления предоставляют такие данные, как идентификатор сеанса, имя базы данных, тип помощника, время начала и остановки сеанса настройки, идентификатор рекомендации, тип рекомендации, причина рекомендации и другие важные сведения. Пользователи могут запрашивать эти представления, чтобы легко получить доступ и проанализировать рекомендации по индексу, созданные с помощью настройки индекса.
Представление sessions
предоставляет все сведения для всех сеансов настройки индекса.
Имя столбца |
тип данных |
Описание |
идентификатор сессии |
UUID (Универсальный уникальный идентификатор) |
Глобальный уникальный идентификатор, назначенный каждому новому сеансу настройки, инициируемого. |
название_базы_данных |
varchar(64) |
Имя базы данных, в контексте которой был выполнен сеанс настройки индекса. |
тип сессии |
intelligentperformance.recommendation_type |
Указывает типы рекомендаций, которые может создавать этот сеанс настройки индекса. Возможные значения: CreateIndex , DropIndex .
CreateIndex Сеансы типа могут создавать рекомендации типаCreateIndex .
DropIndex Сеансы типа могут создавать рекомендации или DropIndex ReIndex типы. |
тип запуска |
интеллектуальнаяпроизводительность.рекомендация_тип_запуска |
Указывает способ, в котором был инициирован этот сеанс. Возможные значения: Scheduled . Сеансы автоматически выполняются согласно значению index_tuning.analysis_interval , назначаются тип Scheduled выполнения. |
государство |
intelligentperformance.recommendation_state |
Указывает текущее состояние сеанса. Допустимые значения: Error , Success , InProgress . Сеансы, выполнение которых завершилось ошибкой, задано как Error . Сеансы, которые правильно выполнили выполнение, независимо от того, создаются ли они рекомендации, задаются как Success . Сеансы, которые по-прежнему выполняются, задаются как InProgress . |
время начала |
метка времени без часового пояса |
Метка времени запуска сеанса настройки, создавшего эту рекомендацию. |
время остановки |
метка времени без часового пояса |
Метка времени запуска сеанса настройки, создавшего эту рекомендацию. ЗНАЧЕНИЕ NULL, если сеанс выполняется или был прерван из-за некоторого сбоя. |
количество_рекомендаций |
целое число |
Общее количество рекомендаций, созданных в этом сеансе. |
Представление recommendations
предоставляет все сведения обо всех рекомендациях, созданных в любом сеансе настройки, данные которого по-прежнему доступны в базовых таблицах.
Имя столбца |
тип данных |
Описание |
recommendation_id |
целое число |
Число, однозначно определяющее рекомендацию на всем сервере. |
последний_известный_идентификатор_сеанса |
UUID (Универсальный уникальный идентификатор) |
Каждый сеанс настройки индекса назначается глобально уникальным идентификатором. Значение в этом столбце представляет собой сеанс, который недавно создал эту рекомендацию. |
название_базы_данных |
varchar(64) |
Имя базы данных, в контексте которой была создана рекомендация. |
тип рекомендации |
intelligentperformance.recommendation_type |
Указывает тип создаваемой рекомендации. Допустимые значения: CreateIndex , DropIndex , ReIndex . |
начальное рекомендованное время |
метка времени без часового пояса |
Метка времени запуска сеанса настройки, создавшего эту рекомендацию. |
последнее_рекомендуемое_время |
метка времени без часового пояса |
Метка времени запуска сеанса настройки, создавшего эту рекомендацию. |
количество_рекомендаций |
целое число |
Метка времени запуска сеанса настройки, создавшего эту рекомендацию. |
причина |
текст |
Причина, по которой объясняется, почему эта рекомендация была создана. |
контекст рекомендации |
JSON (формат обмена данными JavaScript) |
Содержит список идентификаторов запросов для запросов, затронутых рекомендацией, тип рекомендуемого индекса, имя схемы и имя таблицы, в которой рекомендуется использовать индекс, столбцы индекса, имя индекса и предполагаемый размер в байтах рекомендуемого индекса. |
Причины создания рекомендаций по индексу
При настройке индекса рекомендуется создать индекс, он добавляет по крайней мере одну из следующих причин:
Причина |
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.
Дополнительные сведения о том, почему и когда индексы помечены как недопустимые, см . в официальной документации по REINDEX в PostgreSQL.
Причины удаления рекомендаций по индексу
Если настройка индекса обнаруживает индекс, который не используется по крайней мере, количество дней, заданных в 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.