LLM WikiAccess-protected knowledge portal
← 스터디 홈
152편 · 약 13분

ClickHouse 26.7: JOIN 재설계·정규식 엔진 교체·QBit 벡터 검색 완성 — 117개 성능 최적화의 운영자 관점 체크리스트

요약

ClickHouse 26.7이 2026년 8월 초에 출시됐다. 릴리스 규모로는 ClickHouse 역사상 첫 "117개 성능 최적화"를 담은 릴리스다. 64개 신규 기능, 300개 이상의 버그 수정도 함께 포함됐다.

운영자 관점에서 주목할 변화는 세 영역이다.

  1. JOIN 재설계: DPsub 동적 프로그래밍 알고리즘으로 복잡한 다중 테이블 조인에서 최대 8배 이상 속도 향상.
  2. 정규식 엔진 교체: RE2를 대체하는 자체 개발 엔진이 2배 이상 빠르고 vectorscan보다도 빠름.
  3. QBit 벡터 검색 완성: Int8 지원, 스트라이드 저장, Hadamard 회전, 양자화 코덱으로 프로덕션 벡터 검색 경로 완성.

이 외에도 GROUP BY ORDER BY LIMIT 최적화, 위치 인식 구문 검색(phrase search), Web UI 전면 개편이 포함된다.


성능 개선 전체 조감

ClickHouse 26.7: 주요 성능 개선 요약 64 신규기능 · 117 성능최적화 · 300+ 버그수정 JOIN 재설계 DPsub 조인 순서 최적화 알고리즘 우측 조인 → 좌측 필터로 자동 인덱싱 더 컴팩트한 해시 테이블 일부 쿼리 8배+ 속도 향상 정규식 엔진 교체 자체 개발 네이티브 코드 컴파일 엔진 RE2 대체 (기존 표준 엔진) vectorscan보다도 빠름 RE2 대비 2배+ 속도 QBit 벡터 검색 Int8 지원 · Matryoshka 스트라이드 랜덤 Hadamard 회전 양자화 RaBitQ/TurboQuant 내장 코덱 2단계 양자화 검색 파이프라인 완성 수치 연산 가속 와이드 정수 비교: 최대 7× Delta 압축 해제: 최대 5× 통계·비트와이즈 집계: 최대 4× 쿼리 최적화 GROUP BY ORDER BY LIMIT 최적화 위치 인식 구문 검색(phrase search) positional text index 활용 Web UI 전면 개편 다중 쿼리 탭 (제목·파라미터·결과 유지) 스키마 인식 자동완성 + 괄호 강조 인라인 문법 오류 · 키보드 네비게이션 커뮤니티 기여 하이라이트: Manuel Raimann — 와이드 정수 비교 7×, Delta 압축 해제 5×, 통계·비트와이즈 집계 4× 향상 릴리스 날짜: 2026년 8월 초 (25.7 대비 약 1년 주기 major minor)
ClickHouse 26.7 주요 성능 개선 조감

1. JOIN 재설계: DPsub 알고리즘과 우측-좌측 인덱싱

문제: 복잡한 다중 테이블 조인의 비용

ClickHouse는 분석 쿼리에서 대형 사실 테이블과 여러 차원 테이블을 조인하는 경우가 많다. 조인 순서 선택이 잘못되면 불필요한 중간 결과가 폭증한다.

DPsub 알고리즘

26.7은 DPsub(Dynamic Programming on Subsets) 조인 순서 최적화 알고리즘을 도입했다. 이 알고리즘은 가능한 조인 순서의 부분집합에 대해 동적 프로그래밍으로 최적 비용을 계산한다.

주요 메커니즘:

  • 우측 조인 → 좌측 필터 자동 인덱싱: 조인의 우측(RHS)을 인덱스로 활용해 좌측(LHS)을 필터링한다. 적절한 상황에서 쿼리를 8배 이상 빠르게 만든다.
  • 더 컴팩트한 해시 테이블: 해시 조인에 사용되는 해시 테이블 메모리를 줄여 캐시 효율을 높인다.
  • 세 가지 JOIN 개선: 공식 릴리스 노트에서 "세 가지 JOIN 개선"을 언급한다(구체적 상세 내용은 릴리스 블로그 참조).

운영 체크리스트

  • 다중 테이블 조인이 포함된 쿼리는 EXPLAIN 결과를 26.6 vs 26.7 비교해볼 것.
  • join_algorithm 설정이 auto인지 확인. DPsub는 자동 알고리즘 선택 경로에서 작동한다.
  • 업그레이드 후 쿼리 플랜 변경으로 인한 성능 회귀(regression) 가능성을 모니터링할 것.

2. 정규식 엔진 교체: RE2에서 네이티브 컴파일 엔진으로

왜 RE2를 교체했나

RE2는 선형 시간 보장으로 안전하지만, 정규식을 인터프리터 방식으로 실행한다. ClickHouse처럼 수억~수십억 행을 처리하는 환경에서 정규식 매칭 비용이 누적되면 병목이 된다.

새 엔진의 특성

26.7에 도입된 정규식 엔진은 정규식을 네이티브 코드로 컴파일한다. 핵심 특성:

  • RE2 대비 2배 이상 빠름: 기존 표준 엔진 대비 속도 향상.
  • vectorscan보다 빠름: vectorscan은 다중 패턴 매칭에 특화된 SIMD 기반 엔진이다. 자체 개발 엔진이 이를 능가한다.
  • 표준 정규식 문법 호환: 기존 쿼리 변경 없이 속도 이득을 얻는다.

영향받는 함수

match(), extract(), replaceRegexpOne(), replaceRegexpAll(), multiMatchAny() 등 정규식을 사용하는 모든 ClickHouse 함수가 혜택을 받는다.

운영 주의사항

  • RE2 미지원 구문: 자체 엔진이 RE2와 100% 동일한 문법을 지원하는지 확인이 필요하다. RE2는 의도적으로 역참조, lookahead 등 일부 기능을 제외한다. 새 엔진에서 이 제약이 변경됐는지 공식 문서를 확인할 것.

Open question: 새 엔진의 최악 케이스(catastrophic backtracking) 보호 방식이 RE2의 선형 시간 보장과 동등한지 릴리스 노트에서 확인 필요.


3. QBit 벡터 검색 완성: Int8·Matryoshka·Hadamard·코덱

QBit는 ClickHouse의 자체 벡터 검색 엔진이다. 26.7은 여러 개선을 한꺼번에 가져왔다.

3.1 Int8 지원

임베딩을 Int8로 양자화해 QBit에 직접 저장할 수 있다.

  • bfloat16 → int8 최적 양자화 경로 지원
  • Float32 임베딩 대비 메모리 4배 절감
  • 품질 손실 최소화: 최적 BF16→INT8 양자화 사용

3.2 Matryoshka 임베딩을 위한 차원 스트라이드

Matryoshka 임베딩(MRL)은 임베딩 벡터를 잘라서 다른 정밀도로 사용할 수 있다. 26.7은 이를 위한 스트라이드 저장(strided storage)을 도입했다.

  • 전체 1024차원을 저장하되, 검색 시 앞 256차원만 읽는 방식 지원
  • I/O를 줄여 검색 속도 향상

3.3 랜덤 Hadamard 회전

랜덤화된 Hadamard 변환을 양자화 전처리에 적용한다. 임베딩 값 분포를 균일하게 만들어 양자화 오류를 줄이는 표준 기법이다.

  • 양자화 압축률 개선
  • 소수 차원에 값이 집중된 임베딩에서 특히 효과적

3.4 RaBitQ / TurboQuant 내장 코덱

2단계 검색 파이프라인을 위한 양자화 코덱이 내장됐다.

  1. 1단계 (빠른 필터링): 강하게 압축된 양자화 표현으로 후보 집합 빠르게 좁힘.
  2. 2단계 (정밀 재순위): 원본 또는 고정밀 표현으로 최종 결과 검증.

RaBitQ와 TurboQuant는 이미 외부 연구에서 검증된 양자화 기법이다. ClickHouse가 이를 내장 코덱으로 통합했다.

QBit 운영 체크리스트

업그레이드 후 QBit 점검 순서:
1. DESCRIBE TABLE 로 인덱스 타입 확인 (HNSW → QBit 전환 여부)
2. 임베딩 차원이 Matryoshka라면 stride 설정 활성화 고려
3. 정밀도 vs 속도 요구에 따라 1단계/2단계 코덱 선택
4. Int8 양자화 적용 시 recall@10 벤치마크 실행으로 품질 확인
5. BF16 → INT8 양자화 전환 전후 검색 지연(p50/p99) 비교

4. 쿼리 최적화: GROUP BY ORDER BY LIMIT과 구문 검색

GROUP BY ORDER BY LIMIT 최적화

-- 이 패턴에서 26.7은 자동으로 최적화를 적용한다
SELECT user_id, sum(revenue) AS total
FROM events
GROUP BY user_id
ORDER BY total DESC
LIMIT 100;

optimize_aggregation_in_order_limit 설정이 ORDER BY 정렬 케이스를 처리한다. GROUP BY 후 전체 결과를 정렬하는 대신, 집계 과정에서 상위 N개만 추적해 불필요한 정렬 비용을 줄인다.

위치 인식 구문 검색 (Position-Aware Phrase Search)

-- 이 단어들이 이 순서로 인접해 있는 경우만 검색
SELECT * FROM articles
WHERE hasTokens(content, ['데이터베이스', '성능', '최적화'])
  AND phraseSearch(content, '데이터베이스 성능 최적화');

기존 전문 검색(full-text search)은 단어 존재 여부만 확인했다. 26.7의 위치 인식 구문 검색은 positional text index를 활용해 단어들이 지정된 순서로 인접해 있는지 확인한다.

로그 분석, 문서 검색, 이벤트 시퀀스 매칭에서 정밀도를 높인다.


5. 수치 연산 가속

커뮤니티 기여(Manuel Raimann)로 저수준 연산이 크게 빨라졌다.

연산속도 향상
와이드 정수 비교 (128/256-bit)최대 7배
Delta 압축 해제최대 5배
통계 집계 (stddev, variance 등)최대 4배
비트와이즈 집계 (groupBitmapAnd 등)최대 4배

이런 연산은 시계열 데이터, 로그 압축, 집계 쿼리 파이프라인에서 빈번하게 등장한다.


6. Web UI 전면 개편

26.7의 오픈소스 내장 Web UI는 실질적인 SQL IDE로 진화했다.

기능설명
다중 쿼리 탭탭마다 제목, 파라미터, 결과 스냅샷 유지 — 새로고침 후에도 복원
스키마 인식 자동완성테이블명, 컬럼명 자동 완성
괄호·식별자 강조매칭 괄호, 동일 식별자 하이라이트
인라인 문법 오류쿼리 실행 전 오류 표시
키보드 네비게이션마우스 없이 편집 가능

26.6 → 26.7 업그레이드 체크리스트

□ 조인 쿼리 성능 벤치마크 (DPsub 효과 확인)
□ 정규식 집약 쿼리 성능 회귀 테스트
□ QBit 인덱스 재구성 여부 확인 (스키마 변경 없이 자동 적용)
□ Int8 양자화 도입 시 recall 검증
□ GROUP BY ORDER BY LIMIT 쿼리 실행계획 변화 확인
□ 위치 인식 구문 검색 활용 가능 쿼리 식별
□ Web UI 변경 사항 팀 공유
□ optimize_aggregation_in_order_limit 설정 검토

운영자 요약

ClickHouse 26.7은 단순한 패치 릴리스가 아니다. JOIN 최적화, 정규식 엔진 교체, QBit 완성이라는 세 영역에서 근본적인 개선이 이루어졌다.

JOIN 쿼리가 많은 환경에서는 업그레이드만으로 쿼리가 8배 빠른 결과를 경험할 수 있다. 정규식을 자주 사용하는 파이프라인에서는 별도 설정 없이 2배 이상의 속도 향상을 얻는다.

QBit는 이제 Int8·Matryoshka·Hadamard·코덱이 모두 갖춰진 프로덕션급 벡터 검색 엔진이 됐다. 외부 벡터 DB를 ClickHouse로 통합하는 아키텍처가 실용 선택지로 올라왔다.


References