max_streams_for_files_processing_in_cluster_functions
Если значение не равно нулю, ограничивает количество потоков, читающих данные из файлов в *табличных функциях cluster.max_streams_for_merge_tree_reading
Если значение не равно нулю, ограничивает число потоков чтения для таблицы семейства MergeTree.max_streams_for_union_step
Ограничивает число одновременно активных потоков данных на шагеUNION (применяется к UNION ALL, к UNION DISTINCT, поскольку он реализуется через шаг UNION ALL, за которым следует шаг DISTINCT, а также к чтению таблицы Merge с параллельными репликами на основе плана, которое разворачивается в объединение чтений из её нижележащих таблиц). Если запрос 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 оставался отсортированным отдельно.
max_streams_multiplier_for_merge_tables
Запрашивает больше потоков при чтении из таблицы Merge. Потоки будут распределяться между таблицами, которые использует таблица Merge. Это позволяет более равномерно распределять нагрузку между потоками и особенно полезно, когда эти таблицы различаются по размеру. Количество одновременно читающих потоков также ограничивается этим множителем — за исключением чтения из таблицыMerge с параллельными репликами на основе плана (parallel_replicas_allow_merge_tables), которое разворачивается в объединение чтений из её нижележащих таблиц и поэтому ограничивается настройкой max_streams_for_union_step, как и любой другой union.