Оптимизатор запросов#
Оптимизатор CedrusData отвечает за преобразование пользовательского SQL-запроса в распределенный план выполнения. CedrusData поддерживает большое количество продвинутых оптимизаций, включая cost-based планирование порядка Join, упрощение outer join, удаление повторяющихся подпланов, упрощение операторов, и т.д.
Данный документ содержит настройки, влияющие на стратегию оптимизации запросов.
Оптимизация Join#
optimizer.join-reordering-strategy#
Тип: string
Допустимые значения:
CEDRUSDATA_AUTOMATIC,AUTOMATIC,ELIMINATE_CROSS_JOINS,NONEЗначение по умолчанию:
CEDRUSDATA_AUTOMATICСвойство сессии:
join_reordering_strategy
Стратегия выбора оптимального порядка Join.
Примечание
Алгоритмом по умолчанию является CEDRUSDATA_AUTOMATIC. Мы рекомендуем использовать данный алгоритм для всех промышленных сценариев.
CEDRUSDATA_AUTOMATIC— выбирает оптимальный порядок Join на основе статистик с помощью высокопроизводительного алгоритма DPHyp. По сравнению с оригинальным алгоритмом Trino алгоритм CedrusData позволяет оценивать большее количество альтернативных планов за меньшее время. Алгоритм также автоматически заменяет CROSS JOIN на Join с предикатом, где это возможно.AUTOMATIC— оригинальный алгоритм Trino, который выбирает оптимальный порядок Join на основе статистик путем полного перебора всех возможных альтернативных планов. Алгоритм также автоматически заменяет CROSS JOIN на Join с предикатом, где это возможно.ELIMINATE_CROSS_JOINS— автоматически заменяет CROSS JOIN на Join с предикатом, где это возможно, но не изменяет порядок операторов Join.NONE— не изменяет порядок Join и не заменяет CROSS JOIN на Join с предикатом даже при наличии такой возможности.
optimizer.max-reordered-joins#
Тип: integer
Значение по умолчанию:
-1(использовать значение11дляCEDRUSDATA_AUTOMATICили8дляAUTOMATIC)Свойство сессии:
max_reordered_joins
Определяет максимальную сложность графа Join, для которого может быть рассчитан оптимальный порядок Join.
Используется для cost-based стратегий выбора оптимального порядка Join CEDRUSDATA_AUTOMATIC и AUTOMATIC.
Для стратегий ELIMINATE_CROSS_JOINS и NONE значение данного параметра будет проигнорировано.
Выбор оптимального порядка Join в общем случае обладает экспоненциальной сложностью.
Поэтому оптимизатор ограничивает максимальный размер графа, для которого может быть одномоментно рассчитан оптимальный порядок.
Оптимизатор разбивает запрос на один или более непересекающихся графов в зависимости от значения параметра optimizer.max-reordered-joins,
после чего для каждого графа происходит независимый выбор оптимального порядка Join.
Обработка данного параметра отличается для стратегий CEDRUSDATA_AUTOMATIC и AUTOMATIC.
Стратегия CEDRUSDATA_AUTOMATIC строит граф связей Join и исследует только такие комбинаций Join, в которых отсутствует cross-join.
Таким образом, количество планов-кандидатов и время планирования порядка Join зависит от количества связей между таблицами.
Абсолютное количество связей можно рассчитать для типичных топологий графа, таких как chain и star.
В аналитических приложениях часто встречаются запросы типа star и starflake.
При использовании стратегии параметр optimizer.max-reordered-joins задает два ограничения:
максимальное количество Join в графе и максимальное количество связей между таблицами, если бы пользовательский запрос имел топологию звезда.
Подграф будет спланирован целиком, если количество Join в нем не превосходит значение параметра optimizer.max-reordered-joins,
либо если количество связей в графе не превосходит количество связей в запросе с топологией звезда и количеством Join равным значению optimizer.max-reordered-joins.
Это позволяет стратегии CEDRUSDATA_AUTOMATIC планировать подграфы, количество Join в которых превосходит значение параметра optimizer.max-reordered-joins.
Стратегия AUTOMATIC находит оптимальный порядок путем полного перебора всех возможных комбинаций.
Данный алгоритм является значительно менее эффективным, чем CEDRUSDATA_AUTOMATIC и поэтому не может планировать большое количество Join одновременно.
При использовании данной стратегии параметр optimizer.max-reordered-joins задает максимальное количество Join в подграфе.
Выбор значения по умолчанию происходит в зависимости от стратегии выбора оптимального порядка Join: 11 для CEDRUSDATA_AUTOMATIC, 8 для AUTOMATIC.
Мы не рекомендуем увеличивать значения данного параметра, так как это может привести к значительному увеличению времени планирования Join.
cedrusdata.optimizer.join-pruning-enabled#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
cedrusdata_join_pruning_enabled
Включает автоматическое удаление неиспользуемых операторов Join из запроса. В процессе работы оптимизатор заменяет неиспользуемый Join на одну из сторон Join, к которой могут быть применены дополнительные трансформации (проекция или фильтрация) для обеспечения эквивалентности результатов запроса. Замена возможна в следующем случае:
Запрос не использует атрибуты удаляемой стороны Join, или же они могут быть заменены атрибутами оставшейся стороны.
Удаляемая сторона не имеет дополнительных предикатов или же может быть создать эквивалентный предикат поверх оставшейся стороны.
Удаляемые сторона не является противоположной к null-producing стороне Join. Это означает, что в запросе
a LEFT OUTER JOIN bможет быть удалена только сторонаb, в запросеa RIGHT OUTER JOIN bможет быть удалена только сторонаa, а в запросеa FULL OUTER JOIN bне может быть удалена ни одна сторона.Запрос гарантированно не увеличивает количество записей оставшейся стороны. Для обеспечения данного условия необходимо задать
PRIMARY KEYилиUNIQUEconstraint на удаляемой стороне иFOREIGN KEYconstraint на противоположной стороне.
Для работы данной оптимизации необходимо указать примененные к таблицам ограничения (constraints) с помощью параметра конфигурации cedrusdata.optimizer.constraint.file или
свойства сессии cedrusdata_constraints. См. {ref}(cedrusdata-constraints).
Для максимального упрощения запросов постарайтесь задать как можно больше PRIMARY KEY, UNIQUE и FOREIGN KEY ограничений,
а так же NOT NULL ограничений на колонках, используемых в левой части FOREIGN KEY.
Например, следующий запрос может быть автоматически упрощен оптимизатором:
SET SESSION cedrusdata_constraints = ARRAY[
'PRIMARY KEY example.tpch.part(partkey)',
'PRIMARY KEY example.tpch.supplier(suppkey)',
'FOREIGN KEY example.tpch.partsupp(partkey) REFERENCES example.tpch.part(partkey)',
'FOREIGN KEY example.tpch.partsupp(suppkey) REFERENCES example.tpch.supplier(suppkey)'
];
SELECT p_name, COUNT(*)
FROM example.tpch.partsupp
INNER JOIN example.tpch.part ON ps_partkey = p_partkey
INNER JOIN example.tpch.supplier ON ps_suppkey = s_suppkey
WHERE p_retailprice > 100
GROUP BY p_name
Упрощенный запрос после оптимизации:
SELECT p_name, COUNT(*)
FROM example.tpch.partsupp
INNER JOIN example.tpch.part ON ps_partkey = p_partkey
WHERE p_retailprice > 100 AND ps_suppkey IS NOT NULL
GROUP BY p_name
cedrusdata.optimizer.join-pruning-constraint-file#
Тип: string
Значение по умолчанию:
null
Задает путь к файлу, который содержит описание ограничений (constraints), примененных к таблицам. Например:
cedrusdata.optimizer.constraint.file=/path/to/file
Каждая строка файла представляет собой отдельное ограничение в одном из следующих форматов:
PRIMARY KEY table(список_колонок)
UNIQUE имя_таблицы(список_колонок)
FOREIGN KEY имя_таблицы(список_колонок) REFERENCES имя_таблицы(список_колонок)
имя_таблицы(список_колонок) NOT NULL
Имя таблицы должно быть задано в fully-qualified формате каталог.схема.таблица. Имена колонок должны быть разделены запятой. Например:
PRIMARY KEY example.tpch.partsupp(partkey, suppkey)
FOREIGN KEY example.tpch.lineitem(partkey, suppkey) REFERENCES example.tpch.partsupp(partkey, suppkey)
example.tpch.nation(regionkey) NOT NULL
Обновлять содержимое файла можно без перезагрузки узла, задав параметр конфигурации cedrusdata.optimizer.constraint.file.refresh-period.
Можно переопределить ограничения с помощью свойства сессии cedrusdata_constraints. Например:
SET SESSION cedrusdata_constraints = ARRAY[
'PRIMARY KEY example.tpch.part(partkey)',
'PRIMARY KEY example.tpch.supplier(suppkey)',
'FOREIGN KEY example.tpch.partsupp(partkey) REFERENCES example.tpch.part(partkey)',
'FOREIGN KEY example.tpch.partsupp(suppkey) REFERENCES example.tpch.supplier(suppkey)'
];
cedrusdata.optimizer.join-pruning-constraint-file-refresh-period#
Тип: duration
Значение по умолчанию:
null(перечитывание файла отключено)
Задает частоту повторного чтения файла с ограничениями, заданного с помощью параметра конфигурации cedrusdata.optimizer.constraint.file. Например:
cedrusdata.optimizer.constraint.file=/path/to/file
cedrusdata.optimizer.constraint.file.refresh-period=1m
cedrusdata.optimizer.simplify-outer-joins#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
cedrusdata_simplify_outer_joins
Преобразовывать outer join в inner join.
Упрощение возможно, если оптимизатор может доказать, что удаление части результатов из Join не повлияет на конечный результат.
Обычно это возможно, когда над Join имеется фильтр, заведомо отбрасывающий строки, в которых определенных атрибут равен NULL.
Возможные преобразования:
FULL OUTER JOIN->LEFT OUTER JOINFULL OUTER JOIN->RIGHT OUTER JOINFULL OUTER JOIN->INNER JOINLEFT OUTER JOIN->INNER JOINRIGHT OUTER JOIN->INNER JOIN
Рассмотрим запрос:
SELECT store.name
FROM store
LEFT OUTER JOIN address ON store.address_id = address.id
WHERE address.zip = '191131'
LEFT OUTER JOIN может вернуть строки из таблицы store, у которых нет совпадающих значений в таблицы address.
В таких строках колонка address.zip будет иметь значение NULL. Последующий фильтр address.zip = '191131' заведомо отбрасывает подобные строки.
Поэтому Join может быть упрощен:
SELECT store.name
FROM store
INNER JOIN address ON store.address_id = address.id
WHERE address.zip = '191131'
cedrusdata.optimizer.simplify-outer-join-for-merge#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
cedrusdata_simplify_outer_join_for_merge
Преобразовывать outer join в inner join при оптимизации оператора MERGE. Допустимо, когда MERGE не имеет ветки NOT MATCHED.
optimizer.join-partitioned-build-min-row-count#
Тип: integer
Значение по умолчанию:
1000000Минимальное значение:
0Свойство сессии:
join_partitioned_build_min_row_count
Минимальное количество строк build-стороны join, при котором используется партиционированный lookup
в хэш-таблице join. Если оценочное количество строк build-стороны join меньше заданного порога,
используется однопоточный lookup для повышения производительности join.
Значение 0 отключает данную оптимизацию.
optimizer.optimize-duplicate-insensitive-joins#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
optimize_duplicate_insensitive_joins
Сокращает количество строк, порождаемых join, когда оптимизатор определяет, что дублирующиеся строки результата join могут быть пропущены.
Оптимизация агрегаций#
cedrusdata.optimizer.force-push-partial-aggregation-through-join#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
cedrusdata_force_push_partial_aggregation_through_join
Принудительно осуществляет pushdown частичной агрегации (partial aggregation) под join, если такое преобразование допустимо.
cedrusdata.optimizer.simplify-aggregation-key#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
cedrusdata_simplify_aggregation_key
Упрощать ключ агрегации, если оптимизатор может доказать, что результат останется неизменным. Данная оптимизация возможна, когда один ключ агрегации может быть выражен через другой. Например:
GROUP BY a, 1может быть заменен наGROUP BY aс последующим добавлением константы1к результату агрегацииGROUP BY a, concat(a, '_suffix')может быть заменен наGROUP BY aс последующим добавлениемconcatк результату агрегацииGROUP BY a, b, a+bможет быть заменен наGROUP BY a, bс последующим добавлениемa+bк результату агрегации.
cedrusdata.optimizer.push-pre-grouped-symbols-to-partial-aggregation#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
cedrusdata_push_pre_grouped_symbols_to_partial_aggregation
Переносить ли уже предсгруппированные символы в частичную агрегацию (partial aggregation). Предсгруппированные символы — это ключи агрегации, для которых оптимизатор смог доказать, что реальной группировки по ним происходить не будет. Это происходит, когда значения ключа идентичны среди всех входных строк, либо значения ключа полностью определены другими ключами.
Когда данный флаг включен, информация о предсгруппированных символах будет передана в частичную агрегацию в момент разделения однофазного агрегата на частичный и финальный. Это может ускорить выполнение частичного агрегата.
optimizer.dictionary-aggregation#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
dictionary_aggregation
Включает оптимизацию агрегаций над словарными блоками (dictionary blocks).
optimizer.optimize-metadata-queries#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
optimize_metadata_queries
Включает оптимизацию некоторых агрегаций с использованием значений, хранящихся в метаданных.
Это позволяет выполнять некоторые простые запросы за константное время. В настоящий момент оптимизация
применяется к функциям max, min и approx_distinct над ключами партиций, а также к другим агрегациям,
нечувствительным к кардинальности входных данных, включая DISTINCT-агрегации.
Основной недостаток: оптимизация может выдать некорректные результаты, если коннектор возвращает ключи партиций для партиций, в которых отсутствуют строки. В частности, коннектор Hive может возвращать пустые партиции, если они были созданы другими системами. CedrusData не создает пустых партиций.
optimizer.distinct-aggregations-strategy#
Тип: string
Допустимые значения:
AUTOMATIC,MARK_DISTINCT,SINGLE_STEP,PRE_AGGREGATE,SPLIT_TO_SUBQUERIESЗначение по умолчанию:
AUTOMATICСвойство сессии:
distinct_aggregations_strategy
Стратегия вычисления множественных distinct-агрегаций.
SINGLE_STEP— вычисляет distinct-агрегации за один шаг без предварительной агрегации. Данная стратегия работает неэффективно при малом количестве уникальных значений группирующих ключей.MARK_DISTINCT— использует операторMarkDistinctдля множественных distinct-агрегаций или для комбинации distinct- и обычных агрегаций.PRE_AGGREGATE— вычисляет distinct-агрегации путем комбинации агрегации и предварительной агрегации.SPLIT_TO_SUBQUERIES— разбивает входные данные агрегации на независимые подзапросы, каждый из которых вычисляет одну distinct-агрегацию, повышая параллелизм.AUTOMATIC— автоматически выбирает стратегию. Предпочтение отдаетсяSINGLE_STEP, однако при ограниченном параллелизме из-за малого количества уникальных значений группирующих ключей выбирается альтернативная стратегия на основе статистик входных данных.
optimizer.push-aggregation-through-outer-join#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
push_aggregation_through_outer_join
Если агрегация располагается над outer join и все колонки внешней стороны join присутствуют в группирующем выражении, происходит pushdown агрегации под outer join. Данная оптимизация особенно полезна для коррелированных скалярных подзапросов, которые переписываются в агрегацию над outer join. Например:
SELECT * FROM item i
WHERE i.i_current_price > (
SELECT AVG(j.i_current_price) FROM item j
WHERE i.i_category = j.i_category);
Включение данной оптимизации может значительно ускорить запросы за счет сокращения объема данных, обрабатываемых join. Однако она может замедлить запросы с высокоселективными join.
Оптимизация set-операторов (UNION, INTERSECT, EXCEPT)#
cedrusdata.optimizer.simplify-set-operators-with-global-aggregation#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
cedrusdata_simplify_set_operators_with_global_aggregation
Упрощать UNION ALL, когда все его входы представляют собой глобальные агрегации из одной и той же таблицы.
В таком случае UNION ALL будет заменен на однократное чтение из целевой таблицы с последующим расчетом всех
агрегатов.
cedrusdata.optimizer.simplify-set-operators-with-distinct-aggregation#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
cedrusdata_simplify_set_operators_with_distinct_aggregation
Заменяет смежные операторы UNION/INTERSECT/EXCEPT на скан таблицы с фильтром, если все входы операторов читают из одной таблицы, и оптимизатор может доказать, что наличие дублирующих записей не влияет на результат запроса.
cedrusdata.optimizer.simplify-set-operators-with-grouping-sets#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
cedrusdata_simplify_set_operators_with_grouping_sets
Заменяет UNION ALL, в котором входы отличаются только ключом группировки, на однократное чтение входа с последующим расчетом всех необходимых агрегатов.
cedrusdata.optimizer.simplify-set-operators-with-non-intersecting-predicates#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
cedrusdata_simplify_set_operators_with_non_intersecting_predicates
Заменяет UNION ALL, в котором входы читают данные из одной и той же таблицы, и гарантированно возвращают непересекающиеся результаты,
на однократное чтение из целевой таблицы.
Оптимизация Exchange#
optimizer.use-table-scan-node-partitioning#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
use_table_scan_node_partitioning
Использовать предоставляемое коннектором партиционирование таблицы при чтении данных.
Например, для Hive партиционирование таблицы соответствует бакетированию (bucketing).
Если значение равно true и выполняется минимальное соотношение партиций к задачам,
каждая партиция таблицы читается отдельным worker-узлом. Минимальное соотношение задается
параметром optimizer.table-scan-node-partitioning-min-bucket-to-task-ratio.
Распределение чтения партиций по worker-узлам обеспечивает параллельную обработку. Использование партиционирования при сканировании может повысить производительность запроса за счет снижения его сложности — например, может не потребоваться перераспределение данных при выполнении агрегации. Однако параллелизм запроса может снижаться, если количество партиций мало по сравнению с количеством worker-узлов.
optimizer.table-scan-node-partitioning-min-bucket-to-task-ratio#
Тип: double
Значение по умолчанию:
0.5Свойство сессии:
table_scan_node_partitioning_min_bucket_to_task_ratio
Задает минимальное соотношение количества бакетов к количеству задач, при достижении которого используется партиционирование при сканировании таблицы. Если количество бакетов таблицы мало по сравнению с количеством worker-узлов, сканирование распределяется по всем worker-узлам для повышения параллелизма.
optimizer.colocated-joins-enabled#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
colocated_join
Использовать co-located join, когда обе стороны join имеют одинаковое партиционирование по ключам join
и выполняются условия для optimizer.use-table-scan-node-partitioning.
Например, join на бакетированных таблицах Hive с совпадающими схемами бакетирования
может избежать обмена данными между worker-узлами, повышая производительность запроса.
cedrusdata.propagate-preferred-distribution-through-replicated-join#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
cedrusdata_propagate_preferred_distribution_through_replicated_join
Пробрасывать требования к партиционированию из вышестоящих операторов через replicated Join. Включение данного параметра может снизить количество exchange, требуемых для выполнения запроса.
optimizer.use-cost-based-partitioning#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
use_cost_based_partitioning
Включает использование cost-based оптимизатора для определения необходимости перераспределения данных стадии, которая уже имеет партиционирование.
optimizer.use-exact-partitioning#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
use_exact_partitioning
Принудительно выполнять перераспределение данных (repartition), если партиционирование вышестоящей стадии не полностью соответствует ожиданиям нижестоящей стадии.
Управление статистиками#
optimizer.filter-conjunction-independence-factor#
Тип: double
Значение по умолчанию:
0.75Минимальное значение:
0Максимальное значение:
1Свойство сессии:
filter_conjunction_independence_factor
Задает степень независимости предикатов конъюнкции.
Меньшие значения дают более консервативные оценки селективности, предполагая большую степень корреляции между колонками
предикатов в конъюнкции. Значение 0 означает, что оптимизатор предполагает полную корреляцию колонок,
и селективность конъюнкции определяется только наиболее селективным предикатом.
optimizer.join-multi-clause-independence-factor#
Тип: double
Значение по умолчанию:
0.25Минимальное значение:
0Максимальное значение:
1Свойство сессии:
join_multi_clause_independence_factor
Задает степень независимости предикатов join.
Меньшие значения дают более консервативные оценки селективности, предполагая большую степень корреляции между колонками
условий join. Значение 0 означает, что оптимизатор предполагает полную корреляцию колонок,
и селективность join определяется только наиболее селективным предикатом.
optimizer.non-estimatable-predicate-approximation.enabled#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
non_estimatable_predicate_approximation_enabled
Включает аппроксимацию количества выходных строк для фильтров, кардинальность которых не может быть точно оценена даже при наличии полных статистик. Это позволяет оптимизатору строить более эффективные планы при наличии сложных фильтров.
cedrusdata.optimizer.non-estimatable-equijoin-approximation.enabled#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
non_estimatable_equijoin_approximation_enabled
Включает аппроксимацию количества выходных строк для equi-join, кардинальность которого не может быть точно оценена даже при наличии полных статистик. Это позволяет оптимизатору строить более эффективные планы при наличии сложных фильтров.
Материализованные представления#
CedrusData позволяет автоматически заменять части запроса на сканирование материализованных представлений. В настоящее время оптимизация поддерживается только для материализованных представлений в Iceberg.
cedrusdata.optimizer.materialized-view-rewrite.enabled#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
cedrusdata_materialized_views_rewrite_enabled
Включает автоматическое переписывание запросов на материализованные представления.
cedrusdata.optimizer.materialized-view-rewrite.logger-level#
Тип: string
Значение по умолчанию:
null(логирование отключено)Свойство сессии:
cedrusdata_materialized_views_logger_level
Задает уровень логирования для операции подстановки материализованных представлений.
Допустимые значения: INFO, TRACE.
Разное#
cedrusdata.optimizer.cost-based-predicate-reorder-enabled#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
cedrusdata_cost_based_predicate_reorder_enabled
Автоматически переставлять предикаты конъюнкции в соответствии с их селективностью. Позволяет быстрее отбрасывать строки при фильтрации, снижая потребление CPU.
cedrusdata.optimizer.deduplicate-row-expressions#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
cedrusdata_deduplicate_row_expressions
Включает дедупликацию повторяющихся выражений в операторе Project. Приводит к уменьшению потребления CPU.
cedrusdata.optimizer.predicate-pushdown-infer-additional-filters#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
cedrusdata_predicate_pushdown_infer_additional_filters
Выводит дополнительные фильтры, которые могут быть в дальнейшем переданы в операторы сканирования для уменьшения количества чтений при сканировании.
cedrusdata.optimizer.rewrite-like-to-comparison#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
cedrusdata_rewrite_like_to_comparison
Заменяет LIKE на сравнение, если это возможно. Например, c LIKE 'Mos% будет заменено на c >= 'Mos' AND c < 'Mot'
cedrusdata.optimizer.sarg-optimizer-enabled#
Тип: boolean
Значение по умолчанию:
falseСвойство сессии:
cedrusdata_sarg_optimizer_enabled
Выводит дополнительные предикаты для equi-join на основе анализа предикатов, примененных к колонкам equi-условия.
optimizer.push-table-write-through-union#
Тип: boolean
Значение по умолчанию:
trueСвойство сессии:
push_table_write_through_union
Включает параллельную запись данных при использовании UNION ALL в запросах, осуществляющих вставку данных.
Это повышает скорость записи результирующих таблиц, так как операции записи не требуют дополнительной синхронизации
при сборе результатов. Однако данная оптимизация может замедлить запросы в системе с высокой нагрузкой.
optimizer.push-filter-into-values-max-row-count#
Тип: integer
Значение по умолчанию:
100Минимальное значение:
0Свойство сессии:
push_filter_into_values_max_row_count
Максимальное количество строк в VALUES, при котором планировщик вычисляет фильтр, примененный поверх VALUES,
на этапе планирования для оптимизации плана запроса.
optimizer.min-input-size-per-task#
Тип: data size
Значение по умолчанию:
5GBМинимальное значение:
0MBСвойство сессии:
min_input_size_per_task
Минимальный объем входных данных на один task. Данный параметр помогает оптимизатору определить
количество хэш-партиций для join и агрегаций. Ограничение количества хэш-партиций для небольших
запросов повышает конкурентность на больших кластерах, где одновременно выполняется множество
небольших запросов. Рассчитанное значение всегда находится в диапазоне между свойствами сессии
min_hash_partition_count и max_hash_partition_count.
Значение 0MB отключает данную оптимизацию.
optimizer.min-input-rows-per-task#
Тип: integer
Значение по умолчанию:
10000000Минимальное значение:
0Свойство сессии:
min_input_rows_per_task
Минимальное количество входных строк на один task. Данный параметр помогает оптимизатору определить
количество хэш-партиций для join и агрегаций. Ограничение количества хэш-партиций для небольших
запросов повышает конкурентность на больших кластерах, где одновременно выполняется множество
небольших запросов. Рассчитанное значение всегда находится в диапазоне между свойствами сессии
min_hash_partition_count и max_hash_partition_count.
Значение 0 отключает данную оптимизацию.