max_streams_for_files_processing_in_cluster_functions
max_streams_for_merge_tree_reading
max_streams_for_union_step
UNION (применяется как к UNION ALL, так и к UNION DISTINCT, поскольку UNION DISTINCT реализуется через шаг UNION ALL, за которым следует шаг DISTINCT). Если запрос UNION содержит много подзапросов, все они одновременно открывают свои буферы чтения, из-за чего использование памяти становится пропорциональным числу подзапросов. Эта настройка добавляет процессоры Concat, чтобы сузить конвейер и обеспечить одновременную активность не более указанного числа потоков, что значительно снижает пиковое потребление памяти. Фактическое ограничение — это минимум из этого значения и max_threads * max_streams_for_union_step_to_max_threads_ratio (если любое из них равно 0, оно игнорируется). Если оба значения равны 0, сужение не применяется. Ограничение также не применяется, если план запроса требует, чтобы каждый выходной поток UNION оставался отдельно отсортированным (например, когда для UNION применяется оптимизация чтения по порядку); в таком случае корректность порядка имеет приоритет, и сужение пропускается.
max_streams_for_union_step_to_max_threads_ratio
max_threads, задаёт ограничение на число одновременно активных потоков на шаге UNION (применяется как к UNION ALL, так и к UNION DISTINCT). Фактическое ограничение — это минимум из этого вычисленного значения и max_streams_for_union_step (если любое из них равно 0, оно игнорируется). Например, при max_threads = 8 и значении этого коэффициента 1 одновременно будут активны не более 8 потоков. Установите 0, чтобы отключить это ограничение, зависящее от коэффициента. Как и в случае с max_streams_for_union_step, ограничение не применяется, если план запроса требует, чтобы каждый выходной поток UNION оставался отсортированным отдельно.