distributed_* 세션 설정
distributed_* 세션 설정
이 설정들은 Distributed 테이블 엔진의 분산 쿼리·삽입 처리(연결 풀, 집계, LIMIT 푸시다운, product 모드)를 제어해요. ClickHouse 소스 코드에서 자동으로 생성된 세션 설정 문서예요.
출처: 문서
본문
이 설정들은 system.settings에서 사용할 수 있으며 소스 코드에서 자동으로 생성돼요.
distributed_aggregation_memory_efficient
분산 집계의 메모리 절약 모드가 활성화되었는지 여부예요.
distributed_connections_pool_size
단일 Distributed 테이블에 대한 모든 쿼리의 분산 처리를 위해 원격 서버와 동시에 맺는 연결의 최대 수예요. 클러스터의 서버 수 이상의 값을 설정하는 것을 권장해요.
distributed_foreground_insert
별칭(Aliases): insert_distributed_sync
Distributed 테이블에 대한 동기 데이터 삽입을 활성화하거나 비활성화해요.
기본적으로 Distributed 테이블에 데이터를 삽입하면 ClickHouse 서버가 클러스터 노드에 데이터를 백그라운드 모드로 보내요. distributed_foreground_insert=1이면 데이터가 동기로 처리되고, 모든 데이터가 모든 샤드에 저장된 후에만 INSERT 작업이 성공해요(internal_replication이 true이면 각 샤드에 적어도 하나의 복제본).
가능한 값:
0— 데이터가 백그라운드 모드로 삽입됨.1— 데이터가 동기 모드로 삽입됨.
Cloud 기본값: 1.
참고
distributed_group_by_no_merge
분산 쿼리 처리를 위해 서로 다른 서버의 집계 상태를 병합하지 않아요. 서로 다른 샤드에 서로 다른 키가 있다고 확실할 때 사용할 수 있어요.
가능한 값:
0— 비활성화(최종 쿼리 처리는 initiator 노드에서 수행).1- 분산 쿼리 처리를 위해 서로 다른 서버의 집계 상태를 병합하지 않음(쿼리가 샤드에서 완전히 처리되며, initiator는 데이터만 프록시). 서로 다른 샤드에 서로 다른 키가 있다고 확실할 때 사용 가능.2-1과 같지만ORDER BY와LIMIT를 initiator에서 적용(distributed_group_by_no_merge=1처럼 원격 노드에서 쿼리가 완전히 처리될 때는 불가능).ORDER BY및/또는LIMIT가 있는 쿼리에 사용 가능.
예시
SELECT *
FROM remote('127.0.0.{2,3}', system.one)
GROUP BY dummy
LIMIT 1
SETTINGS distributed_group_by_no_merge = 1
FORMAT PrettyCompactMonoBlock
┌─dummy─┐
│ 0 │
│ 0 │
└───────┘
SELECT *
FROM remote('127.0.0.{2,3}', system.one)
GROUP BY dummy
LIMIT 1
SETTINGS distributed_group_by_no_merge = 2
FORMAT PrettyCompactMonoBlock
┌─dummy─┐
│ 0 │
└───────┘
distributed_insert_skip_read_only_replicas
Distributed로의 INSERT 쿼리에 대해 읽기 전용 복제본을 건너뛰는 것을 활성화해요.
가능한 값:
- 0 — INSERT가 평소대로 수행되며, 읽기 전용 복제본에 가면 실패해요.
- 1 — Initiator가 샤드에 데이터를 보내기 전에 읽기 전용 복제본을 건너뛰어요.
distributed_product_mode
분산 서브쿼리의 동작을 변경해요.
ClickHouse는 쿼리에 분산 테이블의 곱(product)이 포함될 때 이 설정을 적용해요. 즉 분산 테이블에 대한 쿼리가 그 분산 테이블에 대한 비-GLOBAL 서브쿼리를 포함할 때예요.
제한 사항:
IN과JOIN서브쿼리에만 적용됨.FROM섹션이 하나 이상의 샤드를 포함하는 분산 테이블을 사용할 때만.- 서브쿼리가 하나 이상의 샤드를 포함하는 분산 테이블과 관련될 때만.
- 테이블 값을 반환하는 remote 함수에는 사용되지 않음.
가능한 값:
deny— 기본값. 이러한 유형의 서브쿼리 사용을 금지(“Double-distributed in/JOIN subqueries is denied” 예외를 반환).local— 서브쿼리의 데이터베이스와 테이블을 대상 서버(샤드)의 로컬 것으로 교체하고 일반IN/JOIN을 유지.global—IN/JOIN쿼리를GLOBAL IN/GLOBAL JOIN으로 교체.allow— 이러한 유형의 서브쿼리 사용을 허용.
distributed_push_down_limit
각 샤드에 LIMIT를 개별적으로 적용하는 것을 활성화하거나 비활성화해요.
이렇게 하면 다음을 피할 수 있어요:
- 네트워크로 추가 행을 보내는 것.
- initiator에서 한도 뒤의 행을 처리하는 것.
21.9 버전부터는 더 이상 부정확한 결과를 얻을 수 없어요. distributed_push_down_limit는 다음 조건 중 적어도 하나가 충족될 때만 쿼리 실행을 변경하기 때문이에요:
- distributed_group_by_no_merge > 0.
- 쿼리가
GROUP BY/DISTINCT/LIMIT BY를 가지지 않고ORDER BY/LIMIT는 가질 때. - 쿼리가
GROUP BY/DISTINCT/LIMIT BY를 가지고ORDER BY/LIMIT와 함께하며:
optimize_skip_unused_shards가 활성화되었을 때. optimize_distributed_group_by_sharding_key가 활성화되었을 때.
가능한 값:
- 0 — 비활성화.
- 1 — 활성화.
참고:
- distributed_group_by_no_merge
- optimize_skip_unused_shards
- optimize_distributed_group_by_sharding_key