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 的每个输出流分别保持有序时,不会应用此限制。