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 — 활성화.

참고:

더 알아보기 (Learn more)