Skip to main content
이 문서는 데이터 웨어하우징 섹션의 일부입니다.

왜 쿼리 최적화가 중요한가요?

동일한 데이터를 조회하더라도, 쿼리를 어떻게 작성하고 테이블을 어떻게 구성하느냐에 따라 실행 시간이 수십 배 차이날 수 있습니다. 대시보드의 응답 속도, ETL 파이프라인의 처리 시간, 그리고 컴퓨팅 비용(DBU) 에 직접적으로 영향을 미칩니다. 이 문서에서는 Databricks에서 쿼리 성능을 극대화하기 위한 핵심 기술과 모범 사례를 상세히 다루겠습니다.

1. Liquid Clustering — 차세대 데이터 레이아웃 최적화

개념

💡 Liquid Clustering 은 데이터를 지정한 컬럼 기준으로 물리적으로 가까이 배치 하여, 쿼리 시 불필요한 파일 읽기를 최소화하는 기술입니다. 기존의 파티셔닝(Partitioning)과 Z-Order를 대체하는 Databricks의 최신 최적화 기술입니다.

왜 기존 방식을 대체하나요?

사용 방법

Clustering 컬럼 선택 가이드

Liquid Clustering의 동작 원리

OPTIMIZE 전후 비교 WHERE region = '서울' AND order_date >= '2025-03-01' 쿼리를 실행하면:
  • 최적화 전: 3개 파일을 모두 스캔해야 합니다
  • 최적화 후: 파일 2만 스캔하면 됩니다 → 데이터 스캔량 2/3 감소

2. Predictive Optimization — 자동 최적화

개념

💡 Predictive Optimization 은 Databricks가 테이블의 사용 패턴을 분석하여, OPTIMIZE와 VACUUM을 자동으로 실행 해 주는 기능입니다. 사용자가 직접 스케줄을 관리할 필요가 없습니다.

활성화 방법

자동으로 수행하는 작업

⚠️ 요구 사항: Predictive Optimization은 Unity Catalog의 Managed Table 에서만 사용할 수 있습니다. External Table에서는 사용할 수 없습니다.

3. Query Profile — 쿼리 성능 분석

Query Profile 읽는 방법

SQL Editor에서 쿼리를 실행한 후 Query Profile 탭을 클릭하면, 실행 계획을 시각적으로 확인할 수 있습니다.

핵심 메트릭

성능 개선 판단 플로우

쿼리 성능 문제 해결 가이드

4. SQL 쿼리 작성 최적화

SELECT * 피하기

💡 Delta Lake는 컬럼 기반(Columnar) 포맷인 Parquet로 데이터를 저장합니다. SELECT *는 모든 컬럼의 데이터를 읽지만, 필요한 컬럼만 지정하면 해당 컬럼의 데이터만 읽으므로 I/O가 크게 줄어듭니다.

JOIN 최적화

💡 브로드캐스트 JOIN(Broadcast JOIN)이란? 작은 테이블을 모든 노드에 복사하여, 큰 테이블의 데이터를 이동(Shuffle)하지 않고 각 노드에서 바로 조인하는 방식입니다. 한쪽 테이블이 충분히 작을 때(일반적으로 수십MB 이하) 매우 효과적입니다.

서브쿼리보다 CTE 사용

효율적인 필터링


5. 테이블 통계 관리

💡 통계(Statistics) 는 쿼리 최적화기(Query Optimizer)가 최적의 실행 계획을 수립하는 데 사용됩니다. 예를 들어, 테이블의 행 수, 컬럼의 고유값 수, 최소/최대값 등을 알면 JOIN 순서나 필터 적용 순서를 더 효율적으로 결정할 수 있습니다.

6. 기타 최적화 기법

Delta Cache

SQL Warehouse는 자주 접근하는 데이터를 로컬 SSD에 자동 캐싱 합니다. 동일한 데이터를 반복 조회할 때 디스크 I/O 없이 캐시에서 바로 읽을 수 있습니다. 별도 설정 없이 자동으로 동작합니다.

Materialized View 활용

자주 실행되는 복잡한 집계 쿼리는 Materialized View 로 만들어 결과를 사전 계산해 두면, 매번 재계산하지 않아 응답 시간이 크게 단축됩니다.

Optimize Write

스트리밍이나 빈번한 INSERT 워크로드에서 작은 파일이 생기는 것을 방지합니다.

최적화 체크리스트


정리


참고 링크