행 최대 관련 설정
행 최대 관련 설정
지연 FINAL, DISTINCT, JOIN, IN 집합, GROUP BY, 읽기, 정렬, 전송 등 다양한 작업에서 최대 행 수를 제어하는 설정들이에요. 메모리 소비를 제한하는 데 유용하답니다. 이 설정들은 system.settings 테이블에서 확인할 수 있고 소스 코드에서 자동 생성된 값들이에요.
출처: 문서
본문
이 설정들은 system.settings에서 확인할 수 있고, 소스 코드에서 자동 생성된 값들이에요.
max_rows_for_lazy_final
지연 FINAL 최적화를 위한 집합의 최대 행 수예요. 초과하면 일반 FINAL로 되돌아가요.
max_rows_in_distinct
DISTINCT 사용 시 서로 다른 최대 행 수예요.
max_rows_in_join
테이블을 조인할 때 사용되는 오른쪽 데이터 구조(보통 해시 테이블)의 행 수를 제한해요. 이 설정은 SELECT … JOIN 작업과 Join 테이블 엔진에 적용돼요.
쿼리에 여러 조인이 포함되면 ClickHouse는 모든 중간 결과에 대해 이 설정을 확인해요. 모든 해시 기반 join_algorithm에 대한 하드 캡이에요. 한도에 도달하면 join_overflow_mode에 따라 쿼리가 throw하거나 break해요.
조인이 디스크로 spill하게 만들지는 않아요. 그 결정은 max_bytes_before_external_join과 max_bytes_ratio_before_external_join에 속해요. 예외는 legacy_join_size_limits_trigger_spilling이에요. 이것이 켜져 있으면 이미 디스크에서 실행 중인 조인 부분은 이 제한을 캡 대신 추가 spill 트리거로 취급해요.
가능한 값:
- 양의 정수.
0— 행 수가 무제한이에요.
max_rows_in_set
서브쿼리에서 생성된 IN 절 데이터 집합의 최대 행 수예요.
max_rows_in_set_to_optimize_join
조인 전에 조인된 테이블을 서로의 행 집합으로 필터링할 수 있는 집합의 최대 크기예요.
가능한 값:
- 0 — 비활성화.
- 임의의 양의 정수.
max_rows_to_group_by
집계에서 받은 최대 고유 키 수예요. 이 설정은 집계할 때 메모리 소비를 제한할 수 있게 해줘요.
GROUP BY 중 집계가 지정된 수보다 많은 행(고유 GROUP BY 키)을 생성하면 동작은 기본값이 throw인 'group_by_overflow_mode'로 결정되지만, 대략적인 GROUP BY 모드로 전환할 수도 있어요.
max_rows_to_read
쿼리 실행 중 테이블에서 읽을 수 있는 최대 행 수예요. 제한은 처리된 각 데이터 청크에 대해 확인되고, 가장 깊은 테이블 표현식에만 적용되며, 원격 서버에서 읽을 때는 원격 서버에서만 확인돼요.
max_rows_to_read_leaf
분산 쿼리 실행 중 리프 노드의 로컬 테이블에서 읽을 수 있는 최대 행 수예요. 분산 쿼리는 각 샤드(리프)에 여러 하위 쿼리를 발행할 수 있지만, 이 제한은 리프 노드의 읽기 단계에서만 확인되고 루트 노드의 결과 병합 단계에서는 무시돼요.
예를 들어 클러스터가 2개 샤드로 구성되고 각 샤드에 100행의 테이블이 있다고 해보세요. 두 테이블의 모든 데이터를 읽어야 하는 분산 쿼리는 max_rows_to_read=150으로는 총 200행이 되므로 실패해요. max_rows_to_read_leaf=150인 쿼리는 리프 노드가 최대 100행을 읽으므로 성공해요.
제한은 처리된 각 데이터 청크에 대해 확인돼요. 이 설정은 prefer_localhost_replica=1에서 불안정해요.
max_rows_to_sort
정렬 전 최대 행 수예요. 정렬할 때 메모리 소비를 제한할 수 있게 해줘요. ORDER BY 작업에 지정된 양보다 많은 레코드를 처리해야 하면 동작은 기본값이 throw인 sort_overflow_mode로 결정돼요.
max_rows_to_transfer
GLOBAL IN/JOIN 섹션이 실행될 때 원격 서버로 전달되거나 임시 테이블에 저장될 수 있는 최대 크기(행)예요.