max_streams_for_files_processing_in_cluster_functions
max_streams_for_merge_tree_reading
max_streams_for_union_step
UNION 단계에서 동시에 활성 상태가 될 수 있는 데이터 스트림 수를 제한합니다(UNION DISTINCT는 UNION ALL 단계 다음에 DISTINCT 단계를 적용하는 방식으로 구현되므로 UNION ALL과 UNION DISTINCT 모두에 적용됩니다). UNION 쿼리에 서브쿼리가 많으면 모든 서브쿼리가 동시에 읽기 버퍼를 열게 되어 메모리 사용량이 서브쿼리 수에 비례하게 됩니다. 이 설정은 Concat 프로세서를 삽입해 파이프라인을 좁힘으로써 한 번에 이 개수까지만 스트림이 활성 상태가 되도록 하며, 그 결과 최대 메모리 사용량을 크게 줄입니다. 실제 제한값은 이 값과 max_threads * max_streams_for_union_step_to_max_threads_ratio 중 더 작은 값입니다(둘 중 하나라도 0이면 해당 값은 무시됩니다). 둘 다 0이면 파이프라인 축소가 적용되지 않습니다. 또한 쿼리 계획상 UNION의 각 출력 스트림이 개별적으로 정렬 상태를 유지해야 하는 경우에는 이 제한이 적용되지 않습니다(예를 들어 UNION 전반에 걸쳐 read-in-order 최적화가 적용되는 경우). 이런 경우에는 정렬의 정확성이 precedence를 가지므로 파이프라인 축소를 건너뜁니다.
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의 각 출력 스트림이 개별적으로 정렬 상태를 유지해야 하는 경우에는 이 제한이 적용되지 않습니다.