ClickHouse 26.7: DPsub 조인 재정렬·QBit Int8·Delta 코덱 벡터화로 분석 쿼리를 최대 8배 빠르게 만드는 방법
# ClickHouse 26.7: DPsub 조인 재정렬·QBit Int8·Delta 코덱 벡터화로 분석 쿼리를 최대 8배 빠르게 만드는 방법
요약
2026년 8월 6일 출시된 ClickHouse 26.7은 조인 최적화, 벡터 검색, 코덱 성능이라는 세 축에서 구체적인 속도 개선을 가져온 릴리스다. 단순 기능 추가가 아니라 쿼리 엔진의 핵심 경로가 바뀐 변화들이 포함돼 있어, 운영자 관점에서 무엇이 달라졌는지 이해하고 클러스터 설정과 쿼리 패턴을 점검해야 한다.
주요 변화 네 가지를 먼저 짚으면 다음과 같다.
- DPsub 조인 재정렬: 다중 테이블 조인의 최적 순서를 자동으로 결정하며, 일부 쿼리에서 최대 8배 속도 향상.
- 해시 조인 압축 참조: 8바이트 인덱스 기반 행 참조로 전환해 조인 메모리를 15% 절감, 처리 속도 12% 향상.
- Delta 코덱 벡터화: 8/16/32비트 데이터 압축 해제 속도 1.5–5배 향상.
- QBit Int8 및 스트라이드 저장: 벡터 검색 정밀도와 속도의 균형을 쿼리 시점에 조절 가능.
조인 최적화: 두 가지 독립 개선
1. DPsub 조인 재정렬 알고리즘
다중 테이블 조인(A JOIN B JOIN C JOIN D)의 성능은 어떤 순서로 조인을 수행하느냐에 따라 크게 달라진다. 잘못된 순서는 중간 결과를 크게 부풀려 메모리 압박과 추가 처리 시간을 유발한다.
ClickHouse 26.7이 도입한 DPsub 알고리즘은 모든 유효한 조인 순서를 동적 프로그래밍으로 탐색해 비용이 가장 낮은 계획을 선택한다. 이전의 dpsize 방식보다 최적화 오버헤드가 낮고, INNER JOIN뿐 아니라 비내부(non-inner) 조인도 지원한다.
핵심 동작 방식:
- 오른쪽 테이블을 인덱스로 사용해 왼쪽을 필터링하는 최적 경로를 자동 감지한다.
- 조인 대상 테이블의 카디널리티 추정값을 기반으로 순서를 결정한다.
- 쿼리를 수정하지 않아도 엔진이 자동으로 최적 순서를 적용한다.
TipRanks 보도에 따르면 DPsub가 적용된 복잡한 다중 조인 쿼리에서 8배 이상의 속도 향상 사례가 보고됐다.
2. 해시 조인 압축 참조
ClickHouse는 해시 조인의 빌드 단계에서 오른쪽 테이블의 행을 해시 테이블에 저장한다. 이전에는 키 유형마다 참조 크기가 달랐는데, 26.7에서는 모든 키 유형에 대해 8바이트 인덱스 기반 참조를 사용하도록 통일했다.
결과:
- 해시 테이블 항목이 작아지고 캐시 효율이 향상된다.
- 1억–3억 행 규모의 조인 벤치마크에서 중간값 기준 처리 속도 12% 향상, 피크 메모리 15% 절감.
운영자 관점에서는 별도 설정 변경 없이 기존 쿼리에서 이 이점을 자동으로 얻는다.
Delta 코덱 벡터화
Delta 코덱은 시계열·타임스탬프 컬럼처럼 인접 값의 차이(delta)를 저장해 압축률을 높이는 ClickHouse의 기본 코덱 중 하나다.
26.7에서 압축 해제 경로를 SIMD 벡터화했다. 구체적인 개선 수치:
| 데이터 유형 | 압축 해제 속도 향상 |
|---|---|
| 8비트 (UInt8, Int8) | 최대 5× |
| 16비트 (UInt16, Int16) | 최대 4× |
| 32비트 (UInt32, Int32, Float32) | 최대 1.5× |
| 컬럼 스캔 전체 기준 | 최대 20% 향상 |
시계열 데이터나 이벤트 로그를 Delta 코덱으로 압축해 저장하는 테이블에서 SELECT 쿼리가 빠르게 눈에 띄게 빨라진다. 운영자가 컬럼 정의를 변경할 필요 없이 자동 적용된다.
QBit 벡터 검색 고도화
QBit란
QBit는 ClickHouse가 26.x 시리즈에서 도입한 벡터 검색 인덱스 타입으로, 정밀도와 속도·메모리의 균형을 쿼리 시점에 조절할 수 있도록 설계됐다. 기존 ANN 인덱스(hnsw 등)와 달리 QBit는 유연한 양자화를 전면에 내세운다.
26.7에서 추가된 네 가지 QBit 개선
- Int8 지원: 임베딩을 Float32 대신 Int8로 직접 저장할 수 있다. 메모리와 스토리지를 75% 절감하면서도 검색 품질을 유지한다. 텍스트 임베딩 모델 중 상당수가 Int8 양자화에 적합한 특성을 가진다.
- 스트라이드 저장(Strided Storage): 전체 벡터 차원 중 일부만 읽어 빠른 후보 필터링을 수행하고, 정밀 재순위는 전체 차원으로 진행하는 2단계 검색을 지원한다. 1536차원 임베딩의 경우 초기 필터링에서 읽는 데이터를 대폭 줄일 수 있다.
- 랜덤화된 아다마르 회전(Randomized Hadamard Rotation): 양자화 전에 벡터에 랜덤 아다마르 변환을 적용해 차원 간 에너지 분포를 균등화한다. 일부 임베딩에서 발생하는 특정 차원 집중 현상을 완화해 양자화 품질을 높인다.
- 양자화 코덱(Quantization Codecs): 2단계 검색(coarse search → fine rerank) 을 위한 코덱 설정이 추가됐다. 빠른 1단계로 후보를 좁히고, 정밀한 2단계로 최종 결과를 결정한다.
주요 개선 사항 구조 다이어그램
모든 유효 순서 탐색
최대 8× 속도
12% 빠름 · 15% 메모리↓
100–300M 행 기준
8/16/32비트 1.5–5×
스캔 최대 20% 향상
최대 7× 향상
메모리 75% 절감
단계별 시간·병렬성·읽은 행
조건 일치 행만 저장
varPop, groupBitAnd 등
EXPLAIN ANALYZE와 필터드 프로젝션
EXPLAIN ANALYZE
ClickHouse 26.7은 EXPLAIN ANALYZE 구문을 통해 쿼리를 실제 실행하면서 단계별 상세 정보를 수집한다.
EXPLAIN ANALYZE
SELECT toStartOfHour(event_time), count()
FROM events
WHERE user_id > 1000
GROUP BY 1
ORDER BY 1;반환 정보:
- 각 파이프라인 단계의 실제 실행 시간
- 병렬 처리 스레드 수
- 각 단계에서 처리한 행 수
이전에는 EXPLAIN 이 예상 계획만 보여줬기 때문에 실제 병목을 찾으려면 system.query_log 와 system.processors_profile_log 를 조합해야 했다. EXPLAIN ANALYZE 가 이 과정을 단일 명령으로 단순화한다.
필터드 프로젝션
프로젝션(Projection)은 ClickHouse가 동일 데이터를 다른 정렬 순서나 집계 상태로 미리 저장하는 기능이다. 26.7에서는 특정 필터 조건을 만족하는 행만 저장하는 필터드 프로젝션을 지원한다.
예를 들어 status = 'error' 인 행만 포함하는 프로젝션을 만들어 두면, 에러 로그 분석 쿼리가 전체 테이블 대신 소규모 프로젝션만 읽을 수 있다.
기타 성능 개선
- 넓은 정수 비교(Wide-Integer Comparisons): UInt128, Int128, UInt256 등 넓은 정수형 비교 연산 최대 7배 향상.
- 통계·비트 집계(Statistical and Bitwise Aggregates):
varPop,stddevPop,groupBitAnd,groupBitOr등 최대 4배 향상. - GROUP BY + ORDER BY + LIMIT 최적화: 상위 N개만 필요한 집계 쿼리에서 불필요한 정렬 단계를 줄인다.
운영 체크리스트
조인 사용 클러스터
EXPLAIN결과에 조인 순서 변화가 생기는지 확인한다. DPsub가 자동 적용되므로 기존 쿼리의 실행 계획이 달라질 수 있다.- 복잡한 다중 조인 쿼리는 업그레이드 후
EXPLAIN ANALYZE로 실제 실행 시간을 측정해 회귀 여부를 점검한다.
Delta 코덱 테이블
toTypeName(column)또는DESCRIBE TABLE로 Delta 코덱이 적용된 컬럼을 확인한다.- 시계열·이벤트 로그 테이블에서 SELECT 쿼리 성능이 자동으로 향상된다.
벡터 검색 사용 클러스터
- QBit 인덱스를 사용 중이라면 Int8 양자화 전환 가능성을 평가한다. 메모리 절감이 크지만 검색 품질 변화를 실험적으로 검증해야 한다.
- 스트라이드 저장 설정은 차원 수와 검색 품질 요구사항에 따라 조정이 필요하다.
EXPLAIN ANALYZE 도입
- 운영 클러스터에서 느린 쿼리를 진단할 때
system.query_log단독 분석에서EXPLAIN ANALYZE활용으로 전환을 고려한다.
Open Questions
- DPsub 알고리즘이 모든 유효 순서를 탐색하므로, 조인 테이블 수가 매우 많을 때(10개 이상) 최적화 자체의 오버헤드가 어느 수준인지 공식 문서에 아직 명시되지 않았다.
- 필터드 프로젝션과 기존 Materialized View를 병행 운영할 때의 스토리지 증가율이 워크로드별로 크게 다를 수 있다. 사전 실험이 권장된다.
- QBit Int8의 검색 품질(Recall@K) 변화는 임베딩 모델과 데이터 분포에 따라 다르며, 범용적인 기준값은 아직 발표되지 않았다.
References
- ClickHouse Release 26.7 (Official Blog)
- ClickHouse 26.7 Release Emphasizes Performance and AI-Oriented Analytics (TipRanks)
- An Introduction to Vector Search and QBit (ClickHouse Docs)
- Exact and Approximate Vector Search — ClickHouse Documentation
- ClickHouse Changelog 2026
- August 2026 Newsletter — ClickHouse