Поделиться через


Настройка индекса в База данных Azure для PostgreSQL — гибкий сервер

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер

Настройка индекса — это функция в База данных Azure для PostgreSQL гибком сервере, который автоматически повышает производительность рабочей нагрузки, анализируя отслеживаемые запросы и предоставляя рекомендации по индексу.

Это встроенное предложение в База данных Azure для PostgreSQL гибкий сервер, который строится на основе производительности монитора с функциональными возможностями хранилища запросов. Настройка индекса анализирует рабочую нагрузку, отслеживаемую хранилищем запросов, и создает рекомендации по индексу для повышения производительности проанализированной рабочей нагрузки или удаления повторяющихся или неиспользуемых индексов.

Общее описание алгоритма настройки индекса

index_tuning.mode При настройке reportпараметра сервера сеансы настройки автоматически запускаются с частотой, настроенной в параметре index_tuning.analysis_intervalсервера, выраженной в минутах.

На первом этапе сеанс настройки ищет список баз данных, в которых он считает, что любые рекомендации, которые могут привести к значительному влиянию на общую производительность системы. Для этого он собирает все запросы, записанные хранилищем запросов, выполнение которых было записано в интервале подстановки, на этом сеансе настройки основное внимание уделяется. Интервал подстановки в настоящее время охватывает последние index_tuning.analysis_interval минуты с момента начала сеанса настройки.

Для всех запросов, инициированных пользователем, с выполнением, записанными в хранилище запросов, и статистика среды выполнения которых не сбрасывается, система ранжирует их на основе совокупного общего времени выполнения. Он фокусирует свое внимание на наиболее известных запросах на основе их длительности.

В этом списке исключены следующие запросы:

  • Запросы, инициированные системой. (то есть запросы, выполняемые ролью azuresu )
  • Запросы, выполняемые в контексте любой системной базы данных (azure_sys, , template0template1иazure_maintenance).

Алгоритм выполняет итерацию по целевым базам данных, выполняя поиск возможных индексов, которые могут повысить производительность проанализированных рабочих нагрузок. Он также ищет индексы, которые можно устранить, так как они определяются как повторяющиеся или не используются для настраиваемого периода времени.

Рекомендации CREATE INDEX

Для каждой базы данных, определяемой как кандидат для анализа рекомендаций по индексу, все запросы SELECT, выполняемые во время интервала подстановки, и в контексте этой конкретной базы данных учитываются.

Примечание.

Настройка индекса анализирует не только инструкции SELECT, но и инструкции DML (UPDATE, INSERT и DELETE).

Результирующий набор запросов ранжируется на основе агрегированного общего времени выполнения, а верхняя часть index_tuning.max_queries_per_database анализируется для возможных рекомендаций по индексу.

Потенциальные рекомендации предназначены для повышения производительности этих типов запросов:

  • Запросы с фильтрами (то есть запросы с предикатами в предложении WHERE);
  • Запросы, присоединенные к нескольким отношениям, соответствуют ли они синтаксису, в котором соединения выражаются с предложением JOIN, или выражаются ли предикаты соединения в предложении WHERE.
  • Запросы, объединяющие фильтры и предикаты соединения.
  • Запросы с группировкой (запросы с предложением GROUP BY).
  • Запросы, объединяющие фильтры и группировку.
  • Запросы с сортировкой (запросы с предложением ORDER BY).
  • Запросы, объединяющие фильтры и сортировку.

Примечание.

Единственным типом индексов, которые в настоящее время рекомендует система, являются те из типов B-Tree.

Если запрос ссылается на один столбец таблицы и эта таблица не имеет статистики, он пропускает весь запрос и не создает рекомендации по индексу для улучшения его выполнения.

Анализ, необходимый для сбора статистики, можно активировать вручную с помощью команды ANALYSIS или автоматически с помощью управляющей программы autovacuum.

index_tuning.max_indexes_per_table указывает количество рекомендуемых индексов, исключая все индексы, которые уже могут существовать в таблице для любой отдельной таблицы, на которую ссылается любое количество запросов во время сеанса настройки.

index_tuning.max_index_count указывает количество рекомендаций по индексу, созданных для всех таблиц любой базы данных, проанализированных во время сеанса настройки.

Для создания рекомендации по индексу подсистема настройки должна оценить, что он улучшает по крайней мере один запрос в анализируемой рабочей нагрузке с помощью фактора, указанного в index_tuning.min_improvement_factorпараметре.

Аналогичным образом, все рекомендации по индексу проверяются, чтобы убедиться, что они не вводят регрессию в одном запросе в этой рабочей нагрузке фактора, указанного с index_tuning.max_regression_factor.

Примечание.

index_tuning.min_improvement_factor и то, и index_tuning.max_regression_factor другое относится к стоимости планов запросов, а не к их длительности или ресурсам, которые они используют во время выполнения.

Все параметры, упомянутые в предыдущих абзацах, их значения по умолчанию и допустимые диапазоны описаны в параметрах конфигурации.

Скрипт, созданный вместе с рекомендацией по созданию индекса, следует следующему шаблону:

create index concurrently {indexName} on {schema}.{table}({column_name}[, ...])

Он включает предложение concurrently. Дополнительные сведения о влиянии этого предложения см. в официальной документации PostgreSQL для CREATE INDEX.

Настройка индекса автоматически создает имена рекомендуемых индексов, которые обычно состоят из имен различных ключевых столбцов, разделенных символами "_" (подчеркивания) и суффиксом константы "_idx". Если общая длина имени превышает ограничения PostgreSQL или если она сталкивается с существующими отношениями, имя немного отличается. Оно может быть усечено, а число может быть добавлено в конец имени.

Вычисление влияния рекомендации CREATE INDEX

Влияние создания рекомендации по индексу измеряется на IndexSize (мегабайты) и QueryCostImprovement (процент).

IndexSize — это одно значение, представляющее предполагаемый размер индекса, учитывая текущее кратность таблицы и размер столбцов, на которые ссылается рекомендуемый индекс.

QueryCostImprovement состоит из массива значений, где каждый элемент представляет улучшение стоимости плана для каждого запроса, стоимость плана которого, по оценкам, улучшается, если этот индекс существует. Каждый элемент показывает идентификатор запроса (запрашиваемый) и процент, по которому стоимость плана улучшится, если рекомендация была реализована (мерная).

Рекомендации DROP INDEX и REINDEX

Для каждой базы данных, для которой определена функция настройки индекса, она должна инициировать новый сеанс, а после завершения этапа рекомендаций CREATE INDEX рекомендуется удалить или переиндексировать существующие индексы на основе следующих критериев:

  • Удалите, если это считается дубликатом других пользователей.
  • Удалите, если оно не используется для настраиваемого периода времени.
  • Индексы повторного индексирования, помеченные как недопустимые.

Удаление повторяющихся индексов

Рекомендации по удалению повторяющихся индексов: сначала определите, какие индексы имеют дубликаты.

Дубликаты ранжируются на основе различных функций, которые можно приписать индексу и на основе их предполагаемых размеров.

Наконец, рекомендуется удалить все дубликаты с более низким рейтингом, чем его эталонный лидер, и описывает, почему каждый дубликат был ранжирован так, как это было.

Для двух индексов, которые следует считать повторяющимися, они должны:

  • Создайтесь над той же таблицей.
  • Быть индексом того же типа.
  • Совпадают со своими ключевыми столбцами и для ключей индекса с несколькими столбцами соответствуют порядку, в котором они ссылаются.
  • Сопоставление дерева выражений предиката. Применимо только к частичным индексам.
  • Соответствует дереву выражений всех ссылок на столбцы, не относящихся к неимпле. Применимо только к индексам, созданным на выражениях.
  • Соответствует параметрам сортировки каждого столбца, на который ссылается ключ.

Удаление неиспользуемых индексов

Рекомендации по удалению неиспользуемых индексов определяют эти индексы, которые:

  • Не используются по крайней мере index_tuning.unused_min_period в течение нескольких дней.
  • Отображение минимального (ежедневного среднего) количества динамических index_tuning.unused_dml_per_table адресов в таблице, в которой создается индекс.
  • Отображение минимального (ежедневного index_tuning.unused_reads_per_table среднего) количества операций чтения в таблице, в которой создается индекс.

Повторное индексирование недопустимых индексов

Рекомендации по повторной индексации существующих индексов определяют те индексы, которые помечены как недопустимые. Дополнительные сведения о том, почему и когда индексы помечены как недопустимые, см . в официальной документации по REINDEX в PostgreSQL.

Вычисление влияния рекомендации DROP INDEX

Влияние рекомендации по снижению индекса измеряется на двух измерениях: преимущество (процент) и IndexSize (мегабайты).

Преимущество — это одно значение, которое можно игнорировать сейчас.

IndexSize — это одно значение, представляющее предполагаемый размер индекса, учитывая текущее кратность таблицы и размер столбцов, на которые ссылается рекомендуемый индекс.

Настройка настройки индекса

Настройка индекса может быть включена, отключена и настроена с помощью набора параметров, которые управляют его поведением, например частоту запуска сеанса настройки.

Изучите все сведения о правильной конфигурации функции настройки индекса в том, как включить, отключить и настроить настройку индекса.

Сведения, созданные с помощью настройки индекса

Как читать, интерпретировать и использовать рекомендации, созданные с помощью настройки индекса, подробно описывает, как получить и использовать рекомендации, созданные при настройке индекса.

Ограничения и возможность поддержки

Ниже приведен список ограничений и области поддержки для настройки индекса.

Поддерживаемые уровни вычислений и номера SKU

Настройка индекса поддерживается на всех доступных уровнях: с возможностью ускорения, общего назначения и оптимизации памяти, а также для любого поддерживаемого в настоящее время номера SKU вычислений с по крайней мере 4 виртуальными ядрами.

Поддерживаемые версии PostgreSQL

Настройка индекса поддерживается в основных версиях 14 или более поздних версий База данных Azure для PostgreSQL гибкого сервера.

Использование search_path

Настройка индекса использует значение, сохраненное в столбце search_path query_store.qs_view, чтобы при анализе каждого запроса было задано то же значение search_path , которое было задано при первоначальном выполнении запроса, является тем, к которому он настроен для анализа возможных рекомендаций.

Параметризованные запросы

Параметризованные запросы, созданные с помощью PREPARE или с помощью расширенного протокола запросов, анализируются и анализируются для создания рекомендаций по индексу для них.

Для анализа параметризованных запросов настройка индекса требует, чтобы для параметра pg_qs.parameters_capture_mode задано значение capture_first_sample , когда хранилище запросов фиксирует выполнение запроса. Кроме того, требуется, чтобы параметры правильно захватывались хранилищем запросов при выполнении запроса. Другими словами, для анализируемого запроса query_store.qs_view должен иметь значение столбца parameters_capture_status succeeded.

Режим только для чтения и реплики чтения

Так как настройка индекса зависит от хранилища запросов, которое не поддерживается в репликах чтения или когда экземпляр находится в режиме только для чтения, мы не поддерживаем его на репликах чтения или в экземплярах, которые находятся в режиме только для чтения.

Все рекомендации, отображаемые на реплике чтения, были созданы на первичной реплике после анализа исключительно рабочей нагрузки, выполняемой на первичной реплике.

Уменьшение масштаба вычислений

Если настройка индекса включена на сервере, и вы масштабируете вычислительные ресурсы этого сервера до меньше минимального количества необходимых виртуальных ядер, функция остается включенной. Так как эта функция не поддерживается на серверах с менее чем 4 виртуальными ядрами, она не будет выполняться для анализа рабочей нагрузки и создания рекомендаций, даже если index_tuning.mode задано значение ON при уменьшении масштаба вычислений. Хотя сервер не соответствует минимальным требованиям, все index_tuning.* параметры сервера недоступны. Каждый раз, когда вы масштабируете резервную копию сервера до вычисления, соответствующего минимальным требованиям, настраивается с любым значением, index_tuning.mode заданным перед масштабированием до вычисления, который не соответствует требованиям.

Высокая доступность и реплики чтения

Если на сервере настроены высокий уровень доступности или реплики чтения, помните о последствиях, связанных с созданием рабочих нагрузок с интенсивным записью на основном сервере при реализации рекомендуемых индексов. Будьте особенно осторожны при создании индексов, размер которых, по оценкам, велик.