Skip to main content
这些设置可在 system.settings 中找到,并由 源代码自动生成。

max_streams_for_files_processing_in_cluster_functions

如果该值不为 0,则限制 *Cluster 表函数 中从文件读取数据的线程数。

max_streams_for_merge_tree_reading

如果该值不为 0,则限制 MergeTree 表的读取流数量。

max_streams_for_union_step

限制 UNION 步骤中同时活跃的数据流数量 (同时适用于 UNION ALLUNION 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 ALLUNION 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 table 读取时请求更多流。这些流会分散到 Merge table 使用的各个表上。这样可以让工作在线程之间分配得更均匀,尤其是在 Merge table 所使用的各个表大小不同时,效果更明显。

max_streams_to_max_threads_ratio

允许源的数量多于线程数,以便在线程之间更均匀地分配工作。这里认为这是一种临时解决方案,因为未来可以让源的数量与线程数相等,同时让每个源动态选择自己可处理的可用工作。
最后修改于 2026年7月23日