최대 스트림 관련 설정

최대 스트림 관련 설정

파일 처리, MergeTree 읽기, UNION 단계, Merge 테이블 읽기에서 사용하는 데이터 스트림 수를 제어하는 설정들이에요. 메모리 사용량과 스레드 간 작업 분배 최적화에 유용하답니다. 이 설정들은 system.settings 테이블에서 확인할 수 있고 소스 코드에서 자동 생성된 값들이에요.

출처: 문서

본문

이 설정들은 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 ALL과, UNION ALL 단계 뒤에 DISTINCT 단계로 구현되는 UNION DISTINCT, 그리고 계획 기반 병렬 레플리카로 읽는 Merge 테이블 읽기 — 기본 테이블의 읽기들의 union으로 확장됨 — 에 적용). UNION 쿼리에 서브쿼리가 많으면 모든 서브쿼리가 동시에 읽기 버퍼를 열어 서브쿼리 수에 비례하는 메모리 사용량이 발생해요. 이 설정은 Concat 프로세서를 삽입해 파이프라인을 좁혀 한 번에 많아야 이 수만큼의 스트림만 활성화되도록 해 최대 메모리를 크게 줄여요. 실제 제한은 이 값과 max_threads * max_streams_for_union_step_to_max_threads_ratio 중 최소값이에요(둘 중 하나가 0이면 무시됨). 둘 다 0이면 좁히기가 적용되지 않아요. 쿼리 계획이 UNION의 각 출력 스트림이 개별적으로 정렬된 상태를 유지해야 할 때도 제한이 적용되지 않아요(예: UNION 전체에 read-in-order 최적화가 적용될 때). 그 경우 정렬의 정확성이 우선하고 좁히기가 건너뛰어져요.

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 테이블에서 읽을 때 더 많은 스트림을 요청해요. 스트림은 Merge 테이블이 사용할 테이블들에 분산돼요. 이는 스레드 간 작업의 더 균등한 분배를 허용하고 병합된 테이블의 크기가 다를 때 특히 유용해요.

동시에 읽는 스트림 수는 이 배수로도 상한이 정해져요. 단, 계획 기반 병렬 레플리카(parallel_replicas_allow_merge_tables)로 읽는 Merge 테이블 읽기는 예외로, 기본 테이블들의 읽기의 union으로 확장되므로 다른 union과 마찬가지로 max_streams_for_union_step으로 상한이 정해져요.

max_streams_to_max_threads_ratio

스레드 수보다 더 많은 소스를 사용할 수 있게 해줘요 — 스레드 간 작업을 더 균등하게 분배하기 위함이에요. 이는 임시 해결책으로 여겨지는데, 미래에는 소스 수를 스레드 수와 같게 만들 수 있지만 각 소스가 자체적으로 사용 가능한 작업을 동적으로 선택할 수 있게 하는 것이 가능할 것이기 때문이에요.

더 알아보기 (Learn more)