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

Документ описывает параметры системной конфигурации в категории Настройка запросов.

Примечание!
Для обеспечения стабильности и безопасности системы ручное изменение этих параметров должно выполняться с осторожностью.

Параметры настройки запросов классифицируются следующим образом:


Параметры управления операторами оптимизатора запросов Postgres

Эти параметры обеспечивают базовый контроль над выбором планов запросов оптимизатором.

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

Более эффективным долгосрочным подходом к улучшению качества планов является: настройка параметров стоимости планировщика (см. ниже), ручной запуск ANALYZE, увеличение значения параметра конфигурации default_statistics_target и использование оператора ALTER TABLE SET STATISTICS для увеличения объема статистики, собираемой для конкретных столбцов.

enable_bitmapscan


Включает или отключает использование планов сканирования битмапов оптимизатором запросов Postgres (планировщиком).

  • Примечание: Это отличается от сканирования битмап-индекса. Сканирование битмапа означает, что индекс динамически преобразуется в битмап в памяти при необходимости, что улучшает производительность индекса для сложных запросов к очень большим таблицам. Он используется, когда имеется несколько предикатов по разным индексированным столбцам. Битмапы для каждого столбца могут быть сравнены для формирования окончательного списка выбранных кортежей.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_groupagg


Включает или отключает использование планов агрегации по группам оптимизатором запросов Postgres (планировщиком).

Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_hashagg


Включает или отключает использование планов хеш-агрегации оптимизатором запросов Postgres (планировщиком).

Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_hashjoin


Включает или отключает использование планов хеш-соединения оптимизатором запросов Postgres (планировщиком).

Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_indexonlyscan


Включает или отключает использование планов сканирования только по индексу оптимизатором запросов Postgres (планировщиком).

Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_indexscan


Включает или отключает использование планов сканирования по индексу оптимизатором запросов Postgres (планировщиком).

Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_mars2aggscan


Включает или отключает использование MARS2 aggscan.

Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_material


Включает или отключает использование материализации оптимизатором запросов Postgres (планировщиком).

  • Полностью отключить материализацию невозможно. Однако отключение этого параметра препятствует вставке узлов материализации планировщиком, если только это не требуется для корректности.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_mergejoin


Включает или отключает использование планов слияния (merge join) оптимизатором запросов Postgres (планировщиком).

  • Слияние основано на сортировке обеих таблиц (левой и правой) и их параллельном сканировании. Следовательно, оба типа данных должны быть полностью сортируемыми, а оператор соединения должен соответствовать только значениям, находящимся на одинаковых позициях в порядке сортировки. На практике это означает, что оператор соединения должен вести себя как оператор равенства.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_nestloop


Включает или отключает использование планов вложенных циклов (nested loop join) оптимизатором запросов Postgres (планировщиком).

  • Полностью подавить вложенные циклы невозможно. Однако, если доступны другие методы, отключение этого параметра препятствует использованию оптимизатором Postgres вложенных циклов.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_parallel_append


Включает или отключает использование планов параллельного объединения (parallel append) оптимизатором запросов Postgres (планировщиком).

Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_parallel_hash


Включает или отключает использование планов хеш-соединения с параллельным хешированием оптимизатором запросов Postgres (планировщиком).

  • Этот параметр не оказывает эффекта, если планы хеш-соединения отключены.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_partition_pruning


Включает или отключает возможность оптимизатора запросов Postgres (планировщика) уменьшать количество разделов в партиционированных таблицах в плане запроса.

  • Также управляет способностью планировщика генерировать планы запросов, позволяющие движку выполнения удалять (игнорировать) разделы во время выполнения запроса. См. Удаление разделов (Partition Pruning).
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_partitionwise_aggregate


Включает или отключает агрегацию по разделам (partition-wise grouping or aggregation) оптимизатором запросов Postgres (планировщиком).

  • Позволяет выполнять группировку или агрегацию на партиционированных таблицах отдельно для каждого раздела.
  • Если в предложении GROUP BY не указан ключ партиционирования, то на каждом разделе может выполняться только частичная агрегация. Финализация должна происходить позже.
  • Поскольку планирование агрегации по разделам потребляет значительные ресурсы ЦП и памяти, значение по умолчанию — off.
Тип данных Значение по умолчанию Область настройки
boolean off master; session; reload

enable_partitionwise_join


Включает или отключает соединения по разделам (partition-wise joins) оптимизатором запросов Postgres (планировщиком).

  • Позволяет выполнять соединения между партиционированными таблицами путем соединения соответствующих разделов.
  • Соединения по разделам применимы только в случае, когда условия соединения включают все ключи партиционирования, типы данных идентичны, а наборы субразделов точно совпадают.
  • Поскольку планирование соединений по разделам потребляет значительные ресурсы ЦП и памяти, значение по умолчанию — off.
Тип данных Значение по умолчанию Область настройки
boolean off master; session; reload

enable_seqscan


Включает или отключает использование планов последовательного сканирования оптимизатором запросов Postgres (планировщиком).

  • Полностью подавить последовательное сканирование невозможно. Однако, если доступны другие методы, отключение этого параметра препятствует использованию оптимизатором Postgres последовательного сканирования.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_sort


Включает или отключает явные этапы сортировки в планах, генерируемых оптимизатором запросов Postgres (планировщиком).

  • Полностью предотвратить явную сортировку невозможно. Однако, если доступны другие методы, отключение этого параметра препятствует использованию оптимизатором Postgres явной сортировки.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

enable_tidscan


Включает или отключает использование планов сканирования по идентификатору кортежа (TID) оптимизатором запросов Postgres (планировщиком).

Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

gp_enable_agg_distinct


Включает или отключает двухэтапную агрегацию для вычисления одиночных функций DISTINCT-агрегации.

  • Применяется только к подзапросам, содержащим одну функцию DISTINCT-агрегации.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

gp_enable_agg_distinct_pruning


Включает или отключает трехэтапную агрегацию и соединение для вычисления функций DISTINCT-агрегации.

  • Применяется только к подзапросам, содержащим одну или более функций DISTINCT-агрегации.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

gp_enable_direct_dispatch


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

  • При включении запросы, нацеленные на строки на одном сегменте, отправляют план только на этот сегмент (а не на все сегменты). Это значительно сокращает время отклика таких запросов за счет исключения накладных расходов на межсоединение.
  • Прямая отправка увеличивает использование ЦП на мастере.
Тип данных Значение по умолчанию Область настройки
boolean on master; system; restart

gp_enable_fast_sri


При установке в значение on оптимизатор запросов Postgres (планировщик) планирует вставки одной строки для прямой отправки на правильный экземпляр сегмента (без операций motion).

  • Это значительно улучшает производительность операторов INSERT с одной строкой.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

gp_enable_multiphase_agg


Включает или отключает использование двух- или трехэтапных параллельных планов агрегации оптимизатором запросов Postgres.

  • Применяется к любому подзапросу с агрегацией. Если gp_enable_multiphase_agg отключен, то gp_enable_agg_distinct и gp_enable_agg_distinct_pruning также отключены.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

gp_enable_preunique


Включает двухэтапное удаление дубликатов (не SELECT COUNT(DISTINCT)) для запросов SELECT DISTINCT.

  • При включении добавляется дополнительный набор узлов плана SORT DISTINCT перед motion.
  • Когда DISTINCT значительно уменьшает количество строк, стоимость дополнительного SORT DISTINCT намного ниже, чем передача строк через межсоединение.
Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

gp_enable_relsize_collection


Позволяет оптимизатору Greenplum GPORCA и оптимизатору запросов Postgres (планировщику) использовать оценку размера таблицы (pg_relation_size функция), когда статистика таблицы недоступна.

  • По умолчанию, если статистика недоступна, оба оптимизатора (GPORCA и планировщик) используют значения по умолчанию для оценки количества строк.
  • Поведение по умолчанию может улучшить время оптимизации запросов и снизить использование очередей ресурсов при высокой нагрузке, но может привести к неоптимальным планам.
  • Этот параметр игнорируется для корневых партиций партиционированных таблиц.
  • При включенном оптимизаторе и отсутствии статистики для корневой партиции всегда используются значения по умолчанию. Вы можете использовать ANALZYE ROOTPARTITION для сбора статистики по корневой партиции. См. ANALYZE.
Тип данных Значение по умолчанию Область настройки
boolean off master; session; reload

gp_enable_sort_distinct


Включает удаление дубликатов во время сортировки.

Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

gp_enable_sort_limit


Включает операцию LIMIT во время сортировки. Сортировка становится более эффективной, когда плану требуется только первые limit_number строк.

Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

gp_selectivity_damping_for_joins


Ослабляет оценки селективности в условиях соединения.

Тип данных Значение по умолчанию Область настройки
boolean off master; session; reload

gp_selectivity_damping_for_scans


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

Тип данных Значение по умолчанию Область настройки
boolean on master; session; reload

min_parallel_index_scan_size


Задает минимальный объем данных индекса (в БЛОКАХ), который должен быть просканирован, прежде чем будет рассмотрен параллельный сканирование индекса.

  • Примечание: Параллельное сканирование индекса обычно не сканирует весь индекс. Оно относится к количеству релевантных страниц, которые оптимизатор ожидает получить доступ.
Тип данных Значение по умолчанию Допустимый диапазон Область настройки
int 512 0 ~ (INT_MAX/3) master; session; reload

min_parallel_table_scan_size


Задает минимальный объем данных таблицы (в БЛОКАХ), который должен быть просканирован, прежде чем будет рассмотрено параллельное сканирование таблицы.

  • Для параллельных последовательных сканирований объем сканируемых данных всегда равен размеру таблицы. Однако при использовании индекса сканируемый объем обычно меньше.
Тип данных Значение по умолчанию Допустимый диапазон Область настройки
int 8192 0 ~ (INT_MAX/3) master; session; reload

parallel_leader_participation


Позволяет процессу-лидеру выполнять части плана запроса под узлами Gather и Gather Merge вместо ожидания рабочих процессов.

  • Установка в значение off снижает вероятность блокировки рабочих процессов ожиданием чтения кортежей лидером, но требует, чтобы лидер ждал запуска рабочих процессов перед генерацией первой строки.
  • Влияние участия лидера на производительность зависит от типа плана, количества рабочих процессов и продолжительности запроса.
Тип данных Значение по умолчанию Область настройки
boolean on master; system; restart


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

Примечание!
Не изменяйте эти параметры. Их изменение влияет на аппаратную конфигурацию YMatrix и типичные рабочие нагрузки. Все эти параметры взаимосвязаны; изменение одного без учета побочных эффектов может ухудшить производительность запросов.

cpu_index_tuple_cost


Задает оценку стоимости оптимизатором (планировщиком) обработки каждой записи индекса во время сканирования индекса. Измеряется как доля стоимости последовательного чтения страницы.

Тип данных Значение по умолчанию Допустимый диапазон Область настройки
floating point 0.005 0 ~ DBL_MAX master; session; reload

cpu_operator_cost


Задает оценку стоимости обработки каждого оператора в WHERE-запросе оптимизатором (планировщиком).

Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 0.0025 0 ~ DBL_MAX master; session; reload

cpu_tuple_cost


Задает оценку стоимости обработки каждой строки (кортежа) в запросе. Измеряется как доля стоимости последовательного чтения страницы.

Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 0.01 0 ~ DBL_MAX master; session; reload

cursor_tuple_fraction


Задает оценку оптимизатором (планировщиком) доли строк, которые будут извлечены курсором.

  • Меньшие значения заставляют планировщик предпочитать планы с «быстрым запуском», возвращающие первые строки быстро, но требующие больше времени для извлечения всех строк. Большие значения акцентируют внимание на общей оценке времени.
  • При максимальном значении 1.0 курсоры планируются как обычные запросы, учитывая только общее время, а не скорость возврата первых строк.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 0.1 0.0 ~ 1.0 master; session; reload

effective_cache_size


Задает предположение оптимизатора (планировщика) об эффективном размере буфера диска (в BLOCKS), доступном для одного запроса.

  • Это значение учитывается при оценке стоимости индексных сканирований. Более высокие значения делают индексные сканирования более вероятными; более низкие — последовательные сканирования.
  • Учитывайте общие буферы YMatrix и ядерные дисковые буферы, используемые для файлов данных YMatrix, хотя некоторые данные могут присутствовать в обоих.
  • Также учитывайте ожидаемое количество одновременных запросов, разделяющих это пространство.
  • Этот параметр не влияет на фактическое выделение общей памяти или резервирование ядерных дисковых буферов. Он используется только для оценки. Система не предполагает, что данные остаются в дисковых буферах между запросами.
  • Инструменты gpconfig и команды SHOW отображают эффективный размер кэша в «MB» или «kB».
Тип данных Значение по умолчанию Допустимый диапазон Область применения
целое число 524288 1 ~ INT_MAX master; session; reload

gp_appendonly_random_page_cost


Задает оценку стоимости несеквенциального чтения страницы диска из таблиц AO.

Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 40.0 0 ~ DBL_MAX master; session; reload

gp_compressed_random_page_cost


Задает оценку стоимости несеквенциального чтения страницы диска из сжатых таблиц AO.

Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 400.0 0 ~ DBL_MAX master; session; reload

gp_motion_cost_per_row


Задает оценку стоимости оператора Motion в оптимизаторе (планировщике) Postgres, на каждую передаваемую строку между сегментами, измеряемую как доля стоимости последовательного чтения страницы.

  • Если установлено в 0, используется значение, вдвое превышающее значение cpu_tuple_cost.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 0.0 0 ~ DBL_MAX master; session; reload

gp_segments_for_planner


Задает количество первичных экземпляров, предполагаемых оптимизатором Postgres для оценки стоимости и размера.

  • Если установлено в 0, используется фактическое количество первичных экземпляров.
  • Эта переменная влияет на оценку оптимизатором количества строк, обрабатываемых каждым отправителем и получателем в операторах Motion.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
целое число 0 0 ~ INT_MAX master; session; reload

parallel_setup_cost


Задает оценку стоимости запуска параллельных рабочих процессов оптимизатором (планировщиком).

Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 1000.0 0 ~ INT_MAX master; session; reload

parallel_tuple_cost


Задает оценку стоимости передачи кортежа от одного параллельного рабочего процесса к другому оптимизатором (планировщиком).

Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 0.1 0 ~ DBL_MAX master; session; reload

random_page_cost


Задает оценку стоимости несеквенциального чтения страницы диска оптимизатором (планировщиком).

  • Это значение может быть переопределено для конкретного табличного пространства путем установки одноименного параметра в этом табличном пространстве.
  • Более высокие значения (относительно seq_page_cost) заставляют систему предпочитать последовательные сканирования; более низкие — индексные. Вы можете одновременно настроить оба параметра, чтобы изменить относительную важность дискового ввода-вывода и стоимости ЦП.
  • Случайный доступ к диску обычно дороже последовательного более чем в четыре раза. Однако, поскольку большинство случайных доступов (например, индексированные чтения) предполагаются кэшированными, используется более низкое значение по умолчанию (4). Это значение по умолчанию моделирует случайный доступ как в 40 раз медленнее последовательного, предполагая, что 90% случайных чтений кэшированы.
  • Если вы считаете, что скорость попадания в кэш 90% неверна для вашей нагрузки, увеличьте random_page_cost, чтобы лучше отразить реальную стоимость случайного чтения. Наоборот, если ваши данные полностью помещаются в кэш (например, база данных меньше общего объема памяти сервера), снижение random_page_cost может быть уместным. Для хранилищ с низкой стоимостью случайного чтения (например, SSD) может быть предпочтительнее более низкое значение random_page_cost.

Примечание!
Хотя вы можете установить random_page_cost ниже, чем seq_page_cost, физическая реальность остается неизменной. Когда все данные находятся в памяти, установка их равными является разумной, поскольку случайный доступ не несет дополнительных затрат. Аналогично, в сильно кэшированных базах данных оба значения следует снижать относительно затрат на ЦП, так как извлечение страниц из оперативной памяти намного дешевле. Если вся база данных кэширована в ОЗУ, установка их равными имеет смысл — дополнительных затрат на несеквенциальный доступ нет. В сильно кэшированной базе данных оба значения следует снижать относительно параметров ЦП, поскольку извлечение страницы, уже находящейся в ОЗУ, значительно дешевле типичного.

Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 4.0 0 ~ DBL_MAX master; session; reload

seq_page_cost


Задает оценку стоимости последовательного чтения страницы диска оптимизатором (планировщиком).

  • Это значение может быть переопределено для конкретного табличного пространства путем установки одноименного параметра в этом табличном пространстве.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 1.0 0 ~ DBL_MAX master; session; reload


Параметры конфигурации генетической оптимизации запросов Postgres

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

geqo


Включает или отключает генетическую оптимизацию запросов.

  • Отключать эту функцию в продакшене обычно не рекомендуется.
  • Переменная geqo_threshold предоставляет более тонкий контроль над GEQO.
Тип данных Значение по умолчанию Область применения
логический off master; session; reload

geqo_effort


Контролирует баланс между временем планирования и эффективностью планов в GEQO.

  • Более высокие значения увеличивают время планирования, но повышают вероятность нахождения лучшего плана.
  • geqo_effort напрямую не влияет на поведение; он используется для вычисления значений по умолчанию для других параметров, связанных с GEQO.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
целое число 0 0 ~ INT_MAX master; session; reload

geqo_generations


Контролирует количество поколений, используемых GEQO.

  • Поколение означает одну итерацию алгоритма. Оно должно быть не менее 1; полезные значения находятся в том же диапазоне, что и размер пула.
  • Если установлено в 0 (по умолчанию), YMatrix выбирает подходящее значение на основе geqo_pool_size.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
целое число 0 0 ~ INT_MAX master; session; reload

geqo_pool_size


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

  • Если установлено в 0 (по умолчанию), выбирается подходящее значение на основе geqo_effort и количества таблиц в запросе.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
целое число 0 0 ~ INT_MAX master; session; reload

geqo_seed


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

  • Значение находится в диапазоне от 0 (по умолчанию) до 1. Изменение его изменяет набор исследуемых путей соединения и может привести к лучшим или худшим планам.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 0.0 0.0 ~ 1.0 master; session; reload

geqo_selection_bias


Контролирует смещение отбора, используемое GEQO.

  • Смещение отбора представляет собой давление отбора внутри популяции. Значения находятся в диапазоне от 1.5 до 2.0, причем 2.0 — значение по умолчанию.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
вещественное число 1.0 0.0 ~ 100.0 master; session; reload

geqo_threshold


Генетическая оптимизация запросов используется только тогда, когда количество задействованных FROM элементов составляет не менее этого значения (замечание: FULL OUTER JOIN считается одним элементом FROM).

  • Для простых запросов используется стандартный планировщик с полным перебором. Для запросов с большим количеством таблиц полный перебор может занять слишком много времени — дольше, чем стоимость выполнения неоптимального плана. Таким образом, порог по размеру запроса — удобный способ управления использованием GEQO.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
целое число 12 2 ~ INT_MAX master; session; reload


Параметры выборки статистики базы данных

Эти параметры контролируют объем данных, выбираемых при операциях ANALYZE. Их настройка влияет на сбор статистики во всей системе. Используйте предложение ALTER TABLE SET STATISTICS, чтобы настроить сбор статистики для конкретных таблиц и столбцов.

default_statistics_target


Задает целевое значение статистики по умолчанию для столбцов таблиц, для которых не задано специфичное для столбца значение через ALTER TABLE SET STATISTICS.

  • Более высокие значения увеличивают время ANALYZE, но улучшают качество оценок, сделанных оптимизатором запросов Postgres.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
целое число 100 0 ~ 10000 master; session; reload


Параметры конфигурации оператора сортировки

gp_enable_sort_limit


Включает операцию LIMIT во время сортировки. Сортировка становится более эффективной, когда плану требуется только первые limit_number строк.

Тип данных Значение по умолчанию Область применения
логический on master; session; reload


Параметры конфигурации оператора агрегации

gp_enable_agg_distinct


Включает или отключает двухэтапную агрегацию для вычисления единичных агрегатных функций DISTINCT.

  • Это применяется только к подзапросам, содержащим одну агрегатную функцию DISTINCT.
Тип данных Значение по умолчанию Область применения
логический on master; session; reload

gp_enable_agg_distinct_pruning


Включает или отключает трехэтапную агрегацию и соединения для вычисления агрегатов с условиями DISTINCT.

  • Это применяется только к подзапросам, содержащим одну или более агрегатных функций DISTINCT.
Тип данных Значение по умолчанию Область применения
логический on master; session; reload

gp_enable_multiphase_agg


Включает или отключает использование двух- или трехэтапных параллельных планов агрегации оптимизатором запросов Postgres.

  • Это применяется к любому подзапросу с агрегацией. Если gp_enable_multiphase_agg отключен, то gp_enable_agg_distinct и gp_enable_agg_distinct_pruning также отключены.
Тип данных Значение по умолчанию Область применения
логический on master; session; reload

gp_enable_preunique


Включает двухэтапное удаление дубликатов для запросов SELECT DISTINCT (не SELECT COUNT(DISTINCT)).

  • При включении добавляется дополнительный набор узлов плана SORT DISTINCT перед перемещением данных.
  • Когда операции DISTINCT значительно уменьшают количество строк, стоимость этого дополнительного SORT DISTINCT намного ниже, чем передача строк через межсегментное соединение.
Тип данных Значение по умолчанию Область применения
логический on master; session; reload

gp_workfile_compression


Определяет, сжимаются ли временные файлы, создаваемые при переполнении операций хеширования агрегации или хеширования соединения на диск.

  • Если ваша установка базы данных использует диски Serial ATA (SATA), включение сжатия может помочь избежать перегрузки дисковой подсистемы операциями ввода-вывода.
Тип данных Значение по умолчанию Область применения
логический off master; session; reload

mx_pullup_agg_proj_and_qual


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

Тип данных Значение по умолчанию Область применения
логический off segments; session; reload


Параметры конфигурации оператора соединения

join_collapse_limit


Если результирующий список содержит не более этого числа элементов, оптимизатор Postgres (планировщик) переписывает явные конструкции JOIN (кроме FULL JOIN) в список элементов FROM.

  • Меньшие значения сокращают время планирования, но могут привести к неоптимальным планам запросов.
  • По умолчанию эта переменная устанавливается равной from_collapse_limit, что подходит для большинства случаев.
  • Установка в 1 предотвращает любое переупорядочивание внутренних соединений. Таким образом, порядок соединений, указанный в запросе, становится фактическим порядком выполнения.
  • Установка этого параметра в значение между 1 и from_collapse_limit может помочь сбалансировать время планирования и качество плана (более высокие значения могут давать лучшие планы).
  • Установка этого значения на geqo_threshold или выше может вызвать использование планировщика GEQO, потенциально приводя к неоптимальным планам.
Тип данных Значение по умолчанию Допустимый диапазон Область применения
целое число 20 1 ~ INT_MAX master; session; reload

gp_adjust_selectivity_for_outerjoins


Включает корректировку селективности для проверок NULL в внешних соединениях.

Тип данных Значение по умолчанию Область действия
boolean on master; session; reload

gp_hashjoin_tuples_per_bucket


Задаёт целевую плотность хеш-таблицы, используемой операциями HashJoin.

  • Меньшие значения приводят к созданию более крупных хеш-таблиц, что может улучшить производительность соединения.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
int 5 1 ~ 25 master; session; reload

gp_workfile_compression


Определяет, сжимаются ли временные файлы, создаваемые при переполнении операций хеш-агрегации или хеш-соединения на диск.

  • Если в вашей установке базы данных используются диски Serial ATA (SATA), включение сжатия может помочь избежать перегрузки подсистемы дисков из-за операций ввода-вывода.
Тип данных Значение по умолчанию Область действия
boolean off master; session; reload


Другие параметры конфигурации оптимизатора запросов Postgres

constraint_exclusion


Управляет использованием ограничений таблиц оптимизатором запросов Postgres (планировщиком) для оптимизации запросов.

  • Поддерживаемые значения: on (проверять ограничения для всех таблиц), off (никогда не проверять ограничения) и partition (проверять ограничения только для наследуемых дочерних таблиц и UNION ALL подзапросов). Значение по умолчанию — partition. Эта настройка обычно используется с традиционными деревьями наследования для повышения производительности.
  • При включении для конкретной таблицы оптимизатор сравнивает условия запроса с ограничениями CHECK таблицы и пропускает сканирование таблиц, где условия противоречат ограничениям. Например:
    =# CREATE TABLE parent(key integer, ...);
    =# CREATE TABLE child1000(check (key between 1000 and 1999)) INHERITS(parent);
    =# CREATE TABLE child2000(check (key between 2000 and 2999)) INHERITS(parent);
    ...
    =# SELECT * FROM parent WHERE key = 2400;

    При включённом constraint_exclusion этот SELECT пропустит сканирование child1000, что улучшит производительность.

  • В настоящее время constraint_exclusion включён по умолчанию только для партиционирования таблиц через наследование. Включение его для всех таблиц добавляет накладные расходы на планирование, особенно для простых запросов, без выгоды. Если ни одна таблица не партиционирована через наследование, лучше полностью отключить эту опцию. (Примечание: Эквивалентная функция для партиционированных таблиц управляется отдельным параметром, enable_partition_pruning.)
Тип данных Значение по умолчанию Допустимый диапазон Область действия
enum on true / false / yes / no / 1 / 0 / on / off / partition master; session; reload

force_parallel_mode


Позволяет использовать параллельные запросы для целей тестирования, даже если ожидаемого повышения производительности нет.

  • Поддерживаемые значения: off (использовать параллельный режим только при ожидаемом улучшении производительности), on (принудительно использовать параллельный запрос, если запрос считается безопасным) и regress (аналогично on, но с дополнительными изменениями поведения, описанными ниже).
  • В частности, установка этого параметра в on добавляет узел Gather в верхнюю часть любого плана запроса, признанного безопасным для параллельного выполнения, чтобы запрос выполнялся внутри параллельного рабочего процесса. Даже если доступных или пригодных рабочих процессов нет, операции, запрещённые в параллельных контекстах (например, запуск подтранзакций), запрещены, если только оптимизатор не считает, что их пропуск приведёт к сбою запроса. При этом параметре функции, вызывающие сбои или неожиданные результаты, могут потребовать маркировки как PARALLEL UNSAFE (или PARALLEL RESTRICTED).
  • Установка этого параметра в regress имеет все эффекты on, плюс дополнительные эффекты, полезные для регрессионного тестирования. Сообщения от параллельных рабочих процессов обычно содержат строку подсказки, указывающую их источник; установка в regress удаляет эту строку, делая вывод идентичным непараллельному выполнению. Аналогично, узлы Gather, добавляемые этим параметром, скрываются в выводе EXPLAIN, соответствующем выводу при установке в off.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
enum off on / off / regress master; session; reload

from_collapse_limit


Если результирующий список FROM не превышает это значение, оптимизатор запросов Postgres (планировщик) "сплющивает" подзапросы в верхнеуровневый запрос.

  • Меньшие значения сокращают время планирования, но могут привести к неоптимальным планам запросов.
  • Установка этого значения на geqo_threshold или выше может вызвать использование планировщика GEQO, что потенциально приведёт к неоптимальным планам.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
int 20 1 ~ INT_MAX master; session; reload

gp_enable_predicate_propagation


При включении оптимизатор запросов Postgres (планировщик) применяет предикаты запроса к обоим выражениям таблиц, когда таблицы соединяются по столбцам ключа распределения.

  • Фильтрация обеих таблиц перед соединением (если возможно) более эффективна.
Тип данных Значение по умолчанию Область действия
boolean on master; session; reload

gp_max_plan_size


Задаёт максимальный несжатый общий размер плана выполнения запроса, умноженный на количество операторов Motion (срезов) в плане.

  • Если план запроса превышает этот размер, запрос отменяется и возвращается ошибка.
  • Значение 0 означает, что размер плана не контролируется.
  • Значения можно указывать в kB, MB или GB. Единица по умолчанию — kB. Например, 200 означает 200kB. Значение 1GB эквивалентно 1024MB или 1048576kB.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
int 0 0 ~ (INT_MAX/1024) master; session; superuser

gp_statistics_pullup_from_child_partition


Позволяет оптимизатору запросов Postgres (планировщику) использовать статистику из дочерних партиций при планировании запросов к родительской таблице.

Тип данных Значение по умолчанию Область действия
boolean off master; session; reload

gp_statistics_use_fkeys


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

Тип данных Значение по умолчанию Область действия
boolean off master; session; reload


Выполнение плана запроса

gp_max_slices


Задаёт максимальное количество срезов (частей плана запроса, выполняемых на экземплярах Segment), которые может сгенерировать запрос.

  • Если запрос генерирует больше срезов, чем указанное число, база данных YMatrix возвращает ошибку и не выполняет запрос.
  • Значение по умолчанию — 0, что означает отсутствие ограничения.
  • Выполнение запросов, генерирующих множество срезов, может негативно повлиять на производительность базы данных. Например, запросы с операторами UNION или UNION ALL на нескольких сложных представлениях могут генерировать множество срезов. Вы можете выполнить EXPLAIN ANALYZE для запроса, чтобы просмотреть его статистику по срезам.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
int 0 0 ~ INT_MAX master; session; reload

plan_cache_mode


Подготовленные инструкции (явно подготовленные или неявно сгенерированные, например, в PL/pgSQL) могут выполняться с использованием либо пользовательских, либо общих планов.

  • Пользовательский план пересоздаётся для каждого выполнения с использованием конкретных значений параметров. Общий план не зависит от значений параметров и может повторно использоваться между выполнениями. Использование общих планов экономит время планирования, но может быть неэффективным, если оптимальный план сильно зависит от значений параметров.
  • Эта настройка учитывается во время выполнения при использовании кэшированного плана, а не во время подготовки плана.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
enum auto auto / force_custom_plan / force_generic_plan master; session; reload


Параметры конфигурации JIT (Just-In-Time)

jit


Определяет, разрешает ли YMatrix компиляцию JIT.

Тип данных Значение по умолчанию Область действия
boolean on master; session; reload

jit_above_cost


Задаёт порог стоимости запроса для активации компиляции JIT (Just-In-Time). Если стоимость запроса превышает это значение, активируется компиляция JIT.

  • JIT потребляет время планирования, но может ускорить выполнение запроса.
  • Установка этого параметра в -1 отключает компиляцию JIT.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
floating point 100000 -1 ~ DBL_MAX master; session; reload

jit_debugging_support


Если LLVM имеет необходимые возможности, регистрирует сгенерированные функции в GDB. Это упрощает отладку.

  • Этот параметр можно задать только при запуске сервера или при запуске клиентского соединения.
Тип данных Значение по умолчанию Область действия
boolean off master; session; reload; superuser

jit_dump_bitcode


Записывает сгенерированный LLVM IR в файловую систему в каталог data_directory.

  • Это полезно только для отладки внутренней реализации JIT.
  • Изменять эту настройку могут только суперпользователи и пользователи с соответствующими правами SET.
Тип данных Значение по умолчанию Область действия
boolean off master; session; reload; superuser

jit_expressions


При активации компиляции JIT позволяет компилировать выражения с помощью JIT.

Тип данных Значение по умолчанию Область действия
boolean on master; session; reload

jit_inline_above_cost


Задаёт порог стоимости запроса, при котором компиляция JIT пытается встраивать функции и операторы.

  • Если стоимость запроса превышает это значение, JIT пытается выполнить встраивание. Встраивание увеличивает время планирования, но может улучшить скорость выполнения.
  • Установка этого параметра ниже jit_above_cost неэффективна.
  • Установка его в -1 отключает встраивание.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
floating point 500000 -1 ~ DBL_MAX master; session; reload

jit_optimize_above_cost


Задаёт порог стоимости запроса, при котором компиляция JIT применяет дорогостоящие оптимизации.

  • Если стоимость запроса превышает это значение, JIT применяет затратные оптимизации. Они увеличивают время планирования, но могут значительно улучшить скорость выполнения.
  • Установка ниже jit_above_cost неэффективна, а установка выше jit_inline_above_cost может не принести выгоды.
  • Установка в -1 отключает дорогостоящие оптимизации.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
floating point 500000 -1 ~ DBL_MAX master; session; reload

jit_profiling_support


Если LLVM имеет необходимые возможности, генерирует данные, необходимые команде perf для профилирования функций, сгенерированных JIT.

  • Это записывает файлы в ~/.debug/jit/. Если установлена и загружена переменная окружения JITDUMPDIR, файлы записываются в JITDUMPDIR/debug/jit вместо этого.
  • Вы несёте ответственность за очистку при необходимости.
  • Этот параметр можно задать только при запуске сервера или при запуске клиентского соединения.
Тип данных Значение по умолчанию Область действия
boolean off master; session; reload; superuser

jit_tuple_deforming


При активации компиляции JIT позволяет компилировать деструктуризацию кортежей с помощью JIT.

Тип данных Значение по умолчанию Область действия
boolean on master; session; reload


Параметры конфигурации оптимизатора Greenplum ORCA

gp_enable_relsize_collection


Если у таблицы отсутствует статистика, позволяет оптимизатору ORCA и оптимизатору запросов Postgres использовать оценённый размер таблицы (функция pg_relation_size).

  • По умолчанию, если статистика недоступна, ORCA и планировщик используют значения по умолчанию для оценки количества строк.
  • Поведение по умолчанию может улучшить время оптимизации запросов и снизить использование очередей ресурсов при высокой нагрузке, но может привести к неоптимальным планам.
  • Этот параметр игнорируется для корневых партиций партиционированных таблиц.
  • Когда ORCA включён, а у корневой партиции отсутствует статистика, ORCA всегда использует значения по умолчанию. Используйте ANALZYE ROOTPARTITION для сбора статистики по корневой партиции. См. ANALYZE.
Тип данных Значение по умолчанию Область действия
boolean off master; session; reload

optimizer


Включает или отключает GPORCA при выполнении SQL-запросов.

  • Значение по умолчанию — on. Если GPORCA отключён, база данных YMatrix использует только оптимизатор запросов Postgres.
  • GPORCA сосуществует с оптимизатором запросов Postgres. При включении YMatrix использует GPORCA для генерации планов выполнения, когда это возможно. Если GPORCA не может быть использован, применяется оптимизатор Postgres.
  • Параметр optimizer можно задавать на уровне системы базы данных, отдельной базы данных, сессии или запроса.
Тип данных Значение по умолчанию Область действия
boolean on master; session; reload

optimizer_analyze_root_partition


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

  • ORCA использует статистику корневой партиции при генерации планов запросов. Оптимизатор запросов Postgres их не использует.
  • Значение по умолчанию — on, что означает, что ANALYZE может собирать статистику корневой партиции без ключевого слова ROOTPARTITION. Статистика собирается при выполнении ANALYZE на корневой партиции или при выполнении ANALYZE на дочерней листовой партиции, если другие листовые партиции имеют статистику.
  • При установке в off необходимо выполнять ANALZYE ROOTPARTITION для сбора статистики корневой партиции.
  • Когда параметр конфигурации сервера optimizer установлен в on (по умолчанию), этот параметр также должен быть установлен в on.
  • Дополнительную информацию о сборе статистики для партиционированных таблиц см. в разделе ANALYZE.
Тип данных Значение по умолчанию Область действия
boolean on master; system; restart

optimizer_array_expansion_threshold


Когда GPORCA включен (по умолчанию) и обрабатываются запросы с предикатами, содержащими константные массивы, параметр optimizer_array_expansion_threshold ограничивает оптимизацию на основе количества констант в массиве.

  • Если массив в предикате запроса содержит больше элементов, чем указано, GPORCA отключает расширение предиката в дизъюнктивную нормальную форму во время оптимизации запроса. Например, при выполнении запроса с предикатом IN, содержащим более 100 элементов, GPORCA не преобразует предикат во время оптимизации, чтобы сократить время планирования и использование памяти. Различия в обработке запроса можно увидеть в условиях фильтрации в предложении EXPLAIN плана запроса IN.
  • Изменение этого параметра регулирует компромисс между сокращением времени оптимизации и снижением использования памяти против потенциальных преимуществ, таких как вывод ограничений во время оптимизации (например, обнаружение конфликтов и исключение партиций).
  • Этот параметр можно задать на уровне системы базы данных, отдельной базы данных, сессии или запроса.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
int 100 0 ~ INT_MAX master; session; reload

optimizer_control


Управляет возможностью пользователей изменять параметр конфигурации сервера optimizer с помощью команд SET, RESET или утилиты YMatrix gpconfig.

  • Если параметр optimizer_control включен, пользователи могут задавать параметры оптимизатора.
  • Если параметр optimizer_control установлен в off, параметры оптимизатора изменять нельзя.
Тип данных Значение по умолчанию Область действия
boolean on master; system; restart; superuser

optimizer_cost_model


Когда GPORCA включен (по умолчанию), этот параметр управляет моделью стоимости, используемой GPORCA для сканирования битовых карт, применяемых с битовыми индексами или B-tree индексами на таблицах AO.

  • legacy — сохраняет модель стоимости calibrated, использовавшуюся GPORCA в Greenplum Database версий 6.13 и ранее.
  • calibrated — улучшает оценку стоимости индексов.
  • experimental — зарезервировано для будущих экспериментальных моделей стоимости; в настоящее время эквивалентно calibrated.
  • По умолчанию модель стоимости calibrated чаще выбирает более быстрые сканирования битовых индексов с вложенными циклами вместо хеш-соединений.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
enum calibrated legacy / calibrated / experimental master; session; reload

optimizer_cte_inlining_bound


Когда GPORCA включен (по умолчанию), этот параметр управляет объемом инлайна для запросов с общими табличными выражениями (CTE) (запросов с предложением WHERE).

  • Значение по умолчанию 0 отключает инлайн.
  • Этот параметр можно задать на уровне системы базы данных, отдельной базы данных, сессии или запроса.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
int 0 0 ~ INT_MAX master; session; reload

optimizer_dpe_stats


Когда оптимизатор Greenplum ORCA включен (по умолчанию) и этот параметр установлен в on (по умолчанию), GPORCA выводит статистику для более точной оценки количества строк, сканируемых во время динамического исключения партиций.

  • Этот параметр можно задать на уровне системы базы данных, отдельной базы данных, сессии или запроса.
Тип данных Значение по умолчанию Область действия
boolean on master; session; reload

optimizer_enable_associativity


Когда GPORCA включен (по умолчанию), этот параметр управляет включением преобразований ассоциативности соединений во время оптимизации запроса.

  • Это преобразование анализирует порядок соединений. При значении по умолчанию off включается только динамическое программирование GPORCA для анализа порядка соединений.
  • Преобразования ассоциативности соединений в значительной степени дублируют функциональность более новой алгоритмической модели динамического программирования.
  • При установке в on GPORCA может использовать преобразования ассоциативности во время оптимизации запроса.
  • Этот параметр можно задать на уровне системы базы данных, отдельной базы данных, сессии или запроса.
Тип данных Значение по умолчанию Область действия
boolean off master; session; reload

optimizer_enable_dml


Когда GPORCA включен (по умолчанию) и этот параметр установлен в on (по умолчанию), GPORCA пытается обрабатывать команды DML, такие как INSERT, UPDATE и DELETE.

  • Если GPORCA не может обработать команду, база данных YMatrix переходит на оптимизатор Postgres.
  • При установке в off Greenplum всегда использует оптимизатор Postgres для команд DML.
  • Этот параметр можно задать на уровне системы базы данных, отдельной базы данных, сессии или запроса.
Тип данных Значение по умолчанию Область действия
boolean on master; session; reload

optimizer_enable_indexonlyscan


Когда GPORCA включен (по умолчанию) и этот параметр включен (по умолчанию), GPORCA может генерировать планы сканирования только по индексу для B-tree индексов.

  • GPORCA обращается только к значениям индекса, а не к блокам данных таблицы.
  • Это улучшает производительность выполнения запросов, особенно когда таблица была проочищена, имеет широкие столбцы и GPORCA не нуждается в извлечении блоков данных (например, видимость подтверждена).
  • При отключении (off) GPORCA не генерирует планы сканирования только по индексу.
  • Этот параметр можно задать на уровне системы базы данных, отдельной базы данных, сессии или запроса.
Тип данных Значение по умолчанию Область действия
boolean on master; session; reload

optimizer_enable_multiple_distinct_aggs


Когда GPORCA включен (по умолчанию), этот параметр позволяет GPORCA поддерживать несколько агрегатов с различными квалификаторами, например SELECT count(DISTINCT a),sum(DISTINCT b) FROM foo.

  • Этот параметр отключен по умолчанию, поскольку результирующие планы часто менее оптимальны по сравнению с планами, генерируемыми оптимизатором Postgres.
  • Этот параметр можно задать на уровне системы базы данных, отдельной базы данных, сессии или запроса.
Тип данных Значение по умолчанию Область действия
boolean off master; session; reload

optimizer_force_agg_skew_avoidance


Когда GPORCA включен (по умолчанию), этот параметр влияет на альтернативные планы запроса, которые GPORCA рассматривает при генерации трехэтапных планов агрегации.

  • При установке в on GPORCA рассматривает только трехэтапные планы агрегации, где промежуточная агрегация использует столбцы GROUP BY и DISTINCT для распределения, чтобы снизить влияние перекоса.
  • При установке в off GPORCA может также рассматривать планы, использующие для распределения столбец GROUP BY.
  • Такие планы могут работать плохо при наличии перекоса.
Тип данных Значение по умолчанию Область действия
boolean on master; session; reload

optimizer_force_multistage_agg


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

  • При установке в off GPORCA выбирает план на основе стоимости, а не эвристик.
  • Этот параметр можно задать на уровне системы базы данных, отдельной базы данных, сессии или запроса.
Тип данных Значение по умолчанию Область действия
boolean off master; session; reload

optimizer_force_three_stage_scalar_dqa


При настройке по умолчанию, когда GPORCA включен и этот параметр включен, GPORCA выбирает многоэтапные планы агрегации, если такие альтернативы доступны.

  • При установке в off GPORCA выбирает план на основе стоимости, а не эвристик.
  • Этот параметр можно задать на уровне системы базы данных, отдельной базы данных, сессии или запроса.
Тип данных Значение по умолчанию Область действия
boolean on master; session; reload

optimizer_join_arity_for_associativity_commutativity


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

  • Этот лимит управляет количеством альтернативных планов, рассматриваемых GPORCA. Например, значение по умолчанию 18 указывает GPORCA остановить исследование преобразований ассоциативности и коммутативности, когда n-арный оператор соединения имеет более 18 дочерних элементов.
  • Для запросов с большим количеством соединений указание меньшего значения может улучшить производительность запроса, ограничив количество оцениваемых альтернативных планов.
  • Однако слишком низкое значение может привести к неоптимальным планам выполнения.
  • Этот параметр не оказывает влияния, если параметр optimizer_join_order установлен в query или greedy.
  • Этот параметр можно задать на уровне системы базы данных или сессии.
Тип данных Значение по умолчанию Допустимый диапазон Область действия
int 18 0 ~ INT_MAX segments; system; reload

optimizer_join_order


Когда GPORCA включен, этот параметр задает уровень оптимизации для упорядочивания соединений во время оптимизации запроса, указывая тип альтернативных порядков соединений для оценки.

  • query — использовать порядок соединений, указанный в запросе.
  • greedy — вычислить порядок соединений, указанный в запросе, и альтернативы на основе наименьшей мощности отношений в соединениях.
  • exhaustive — применить правила преобразования для поиска и оценки всех возможных альтернатив порядков соединений.
  • По умолчанию — exhaustive. Установка этого параметра в query или greedy может привести к неоптимальным планам запроса. Однако, если администратор уверен, что удовлетворительные планы создаются с query или greedy, снижение уровня оптимизации может ускорить процесс оптимизации запроса.
  • Установка этого параметра в query или greedy переопределяет параметры optimizer_join_order_threshold и optimizer_join_arity_for_associativity_commutativity.
  • Этот параметр можно задать на уровне базы данных, сессии или запроса.
Тип данных Значение по умолчанию Диапазон значений Классификация настройки
enum exhaustive exhaustive / greedy / query master; session; reload

optimizer_join_order_threshold


Когда GPORCA включен (по умолчанию), этот параметр задает максимальное количество входов соединения, для которых GPORCA использует алгоритм упорядочивания соединений на основе динамического программирования.

  • Это значение можно задать для отдельного запроса или для всей сессии.
  • Этот параметр не оказывает влияния, если параметр optimizer_join_query установлен в query или greedy.
Тип данных Значение по умолчанию Диапазон значений Классификация настройки
int 10 0 ~ 12 master; session; reload

optimizer_mdcache_size


Задает максимальный объем памяти (в КБ) на мастере базы данных YMatrix, который GPORCA использует для кэширования метаданных запросов (данных оптимизации) во время оптимизации запроса.

  • Кэш является сессионным.
  • По умолчанию GPORCA кэширует метаданные запросов во время оптимизации, если GPORCA включен и optimizer_metadata_caching включен.
  • Значение по умолчанию — 16384(16MB), что является оптимальным значением, определенным на основе анализа производительности.
  • Вы можете указывать значения в KB, MB или GB. Единица измерения по умолчанию — KB. Например, значение 16384 означает 16384KB. Значение 1GB эквивалентно 1024MB или 1048576KB.
  • Если значение равно 0, размер кэша не ограничен.
  • Этот параметр можно задать на уровне системы, базы данных, сессии или запроса.
Тип данных Значение по умолчанию Диапазон значений Классификация настройки
int 16384 0 ~ INT_MAX master; session; reload

optimizer_metadata_caching


Когда GPORCA включен (по умолчанию), этот параметр указывает, кэширует ли GPORCA метаданные запросов (данные оптимизации) в памяти на мастере базы данных YMatrix во время оптимизации запроса.

  • Кэш является сессионным и освобождается при завершении сессии. Если объем метаданных превышает размер кэша, старые неиспользуемые метаданные удаляются.
  • Если значение равно off, GPORCA не кэширует метаданные во время оптимизации запроса.
  • Этот параметр можно задать на уровне системы, базы данных, сессии или запроса.
  • Параметр конфигурации сервера optimizer_mdcache_size управляет размером кэша метаданных запроса.
Тип данных Значение по умолчанию Классификация настройки
boolean on master; session; reload

optimizer_parallel_union


Когда GPORCA включен (по умолчанию), optimizer_parallel_union управляет степенью параллелизма для запросов, содержащих UNION или UNION ALL.

  • При значении off GPORCA генерирует план запроса, в котором каждый дочерний элемент оператора APPEND(UNION) находится в том же срезе, что и оператор APPEND.
  • Во время выполнения запроса дочерние узлы выполняются последовательно.
  • При включенном значении GPORCA генерирует план запроса с узлом redistribute Motion под оператором APPEND(UNION). Во время выполнения дочерние и родительские операторы APPEND находятся на разных срезах, что позволяет дочерним элементам оператора APPEND(UNION) выполнять параллельно на экземплярах Segment.
  • Этот параметр можно задать на уровне системы, базы данных, сессии или запроса.
Тип данных Значение по умолчанию Классификация настройки
boolean off master; session; reload

optimizer_penalize_broadcast_threshold


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

  • Например, если этот параметр установлен в 100K строк (по умолчанию), любая трансляция, превышающая 100K строк, сильно штрафуется.
  • При установке в 0 GPORCA устанавливает порог трансляции как неограниченный и никогда не штрафует операции трансляции.
Тип данных Значение по умолчанию Диапазон значений Классификация настройки
int 100000 0 ~ INT_MAX master; session; reload

optimizer_penalize_skew


При включённом GPORCA (по умолчанию) этот параметр позволяет GPORCA снижать стоимость сегмента для операторов HashJoin, у которых дочерним элементом является смещённое Redistribute Motion, предпочитая при оптимизации запросов Broadcast Motion.

  • GPORCA обнаруживает смещение в движении Redistribute, когда количество различных значений (NDV) меньше числа сегментов.
  • Этот параметр можно задавать на уровне системы, базы данных, сессии или запроса.
Тип данных Значение по умолчанию Классификация настройки
boolean on master; session; reload

optimizer_print_optimization_stats


При включённом GPORCA (по умолчанию) этот параметр включает логирование статистики оптимизации запросов GPORCA для различных фаз оптимизации.

  • Значение по умолчанию — off; статистика оптимизации не логируется.
  • Для включения логирования статистики оптимизации этот параметр должен быть установлен в on, а параметр client_min_messages — в log.
    • set optimizer_print_optimization_stats = on;
    • set client_min_messages = 'log';
  • Информация записывается во время выполнения запроса или при использовании команд EXPLAIN или EXPLAIN ANALYZE.
  • Этот параметр можно задавать на уровне системы, базы данных, сессии или запроса.
Тип данных Значение по умолчанию Классификация настройки
boolean off master; session; reload

optimizer_sort_factor


При включённом GPORCA (по умолчанию) optimizer_sort_factor управляет коэффициентом стоимости, применяемым к операциям сортировки при оптимизации запросов.

  • Значение по умолчанию 1 задаёт стандартный коэффициент стоимости сортировки.
  • Значение представляет собой множитель, увеличивающий или уменьшающий стандартный коэффициент. Например, значение 2.0 устанавливает коэффициент стоимости в два раза выше стандартного, а значение 0.5 — в два раза ниже.
  • Этот параметр можно задавать на уровне системы, базы данных, сессии или запроса.
Тип данных Значение по умолчанию Диапазон значений Классификация настройки
floating point 1.0 0.0 ~ DBL_MAX master; session; reload


Параметры конфигурации оптимизации Runtime Filter

mx_enable_runtime_filter


Включает или отключает Runtime Filter.

Тип данных Значение по умолчанию Классификация настройки
boolean on master; session; reload

mx_runtime_join_ratio


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

Тип данных Значение по умолчанию Диапазон значений Классификация настройки
int 10 0 ~ (INT_MAX/2) master; session; reload

mx_runtime_max_filter_per_query


Максимальное количество Runtime Filter, разрешённых на один запрос.

Тип данных Значение по умолчанию Диапазон значений Классификация настройки
int 4 0 ~ (INT_MAX/2) master; session; reload

mx_runtime_max_inner_rows


Runtime Filter не активируется, если количество строк во внутренней таблице соединения превышает это значение.

Тип данных Значение по умолчанию Диапазон значений Классификация настройки
int 2000000 0 ~ (INT_MAX/2) master; session; reload

mx_runtime_max_intent_level


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

Тип данных Значение по умолчанию Диапазон значений Классификация настройки
int 3 0 ~ (INT_MAX/2) master; session; reload

mx_runtime_min_outer_rows


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

Тип данных Значение по умолчанию Диапазон значений Классификация настройки
int 500000 0 ~ (INT_MAX/2) master; session; reload

mx_runtime_scan_ratio


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

Тип данных Значение по умолчанию Диапазон значений Классификация настройки
int 25 0 ~ (INT_MAX/2) master; session; reload


Параметры конфигурации векторизованного движка исполнения

matrix.enable_mxvector


Включает или отключает векторизованный движок исполнения.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_aggregate


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

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_hash_aggregate


Включает векторизованный движок исполнения для использования планов хеш-агрегации.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_append


Включает векторизованный движок исполнения для использования типов планов Append.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_motion


Включает векторизованный движок исполнения для использования типов планов Motion.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_presort_aggregate


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

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_root


Включает корневой исполнитель векторизованного движка исполнения.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_sort


Включает векторизованный движок исполнения для использования типов планов сортировки.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_strict_mode


Включает строгий режим для векторизованного движка исполнения.

  • При обнаружении выражения, которое не может быть обработано векторизацией, немедленно генерируется исключение, и сервер прекращает обработку текущего запроса.
Тип данных Значение по умолчанию Классификация настройки
boolean false master; session; reload

matrix.enable_mxv_fallback_expression


Включает резервные выражения для векторизованного движка исполнения.

  • Если этот параметр отключён, обнаружение выражения, неподдерживаемого векторизованным исполнителем, приводит к полному откату всего запроса к скалярному плану (без векторизованных узлов).
Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_limit


Включает векторизованный движок исполнения для использования типов планов Limit.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_window


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

Тип данных Значение по умолчанию Классификация настройки
boolean false master; session; reload

matrix.enable_mxv_subqueryscan


Включает векторизованный движок исполнения для использования типов планов Subquery Scan.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_hash_join


Включает векторизованный движок исполнения для использования типов планов Hash Join.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_hash_join_advanced_hashmap


Включает расширенную хеш-таблицу для векторизованных соединений по хешу.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_aggscan


Включает векторизованный движок исполнения для использования типов планов AggScan.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload

matrix.enable_mxv_indexscan


Включает векторизованный движок исполнения для использования индексных сканирований.

Тип данных Значение по умолчанию Классификация настройки
boolean true master; session; reload