3. 스토리지 최적화
3.1 Liquid Clustering으로 스캔량 감소
Liquid Clustering은 테이블 데이터를 쿼리 패턴에 맞게 자동으로 재배치하여, 불필요한 데이터 스캔을 대폭 줄입니다.| 방식 | 스캔 데이터량 (1TB 테이블, 특정 날짜 조회) | 상대 비용 |
|---|---|---|
| 클러스터링 없음 | ~1TB (풀 스캔) | ★★★★★ |
| 파티션 (날짜) | ~3GB (1일치) | ★☆☆☆☆ |
| Liquid Clustering (날짜) | ~3GB (1일치) + 점진적 최적화 | ★☆☆☆☆ |
3.2 VACUUM / OPTIMIZE 주기 최적화
| 테이블 유형 | OPTIMIZE 주기 | VACUUM 주기 | 비고 |
|---|---|---|---|
| 실시간 스트리밍 (분 단위) | 매 1-4시간 | 매일 | Small File 문제 빈번 |
| 일일 배치 | 매일 (배치 후) | 주 1회 | 배치 완료 직후 실행 |
| 주간/월간 배치 | 배치 후 | 월 1회 | 빈도 낮으면 수동 OK |
| 읽기 전용 (분석용) | 월 1회 | 분기 1회 | 변경 없으면 최소화 |
3.3 Predictive Optimization 활용
Predictive Optimization은 Unity Catalog 관리형 테이블에 대해 OPTIMIZE, VACUUM, ANALYZE를 자동으로 실행 합니다.💡 비용 효과: Predictive Optimization을 활성화하면 수동 OPTIMIZE/VACUUM 작업을 관리할 필요가 없어지고, 서버리스 Jobs SKU로 과금되어 효율적입니다. 2024년 11월 이후 생성된 계정에는 기본 활성화되어 있습니다.
4. SQL Warehouse 최적화
4.1 Warehouse 사이징 가이드
| 동시 사용자 | 쿼리 복잡도 | 권장 크기 | 클러스터 수 |
|---|---|---|---|
| 1-5명 | 간단한 조회 | Small | 1 |
| 5-15명 | 중간 복잡도 | Medium | 1-2 |
| 15-50명 | 복잡한 조인/집계 | Large | 2-5 |
| 50-200명 | 다양한 혼합 | X-Large | 5-10 |
| 200명+ | 대시보드 + Ad-hoc | 2X-Large | 10+ |
💡 Serverless 전략: Serverless SQL Warehouse를 사용한다면 큰 단일 Warehouse에서 시작 하는 것이 권장됩니다. Serverless의 Intelligent Workload Management가 자동으로 동시성을 관리합니다.
4.2 Auto Stop vs Always On 비용 비교
4.3 Result Cache와 Materialized View 활용
| 캐싱 전략 | 적용 대상 | 효과 | 비용 영향 |
|---|---|---|---|
| Result Cache | 동일 쿼리 반복 | 재계산 없이 즉시 반환 | 자동 적용, 무료 |
| Disk Cache | 자주 접근하는 데이터 | 리모트 스토리지 읽기 제거 | 로컬 SSD 필요 |
| Materialized View | 복잡한 집계 쿼리 | 사전 계산 + 증분 갱신 | 저장 비용 발생, 컴퓨트 비용 대폭 절감 |
5. SQL Warehouse T-shirt 사이즈별 상세 가이드
5.1 사이즈별 스펙과 용도
| 사이즈 | 클러스터 노드 수 | 대략적 코어/메모리 | 적합한 용도 | 시간당 DBU |
|---|---|---|---|---|
| 2X-Small | 1 | 4 코어, 16GB | 단일 사용자 테스트 | ~2 DBU |
| X-Small | 1 | 8 코어, 32GB | 소규모 대시보드 (1-3명) | ~4 DBU |
| Small | 2 | 16 코어, 64GB | 소규모 팀 (5명 이하) | ~8 DBU |
| Medium | 4 | 32 코어, 128GB | 중규모 팀 (5-15명) | ~16 DBU |
| Large | 8 | 64 코어, 256GB | 대규모 팀 + 복잡 쿼리 | ~32 DBU |
| X-Large | 16 | 128 코어, 512GB | 대규모 동시 접속 | ~64 DBU |
| 2X-Large | 32 | 256 코어, 1TB | 엔터프라이즈 대시보드 | ~128 DBU |
참고 사이즈 선택 팁: Small에서 시작하여 Query History의 대기 시간(queued time)을 모니터링하세요. 대기 시간이 빈번하게 발생하면 사이즈를 올리거나 클러스터 수를 늘리세요.
5.2 사이즈 결정 의사결정 트리
6. 오토스케일링 전략
6.1 Classic SQL Warehouse 오토스케일링
| 설정 | 설명 | 권장값 |
|---|---|---|
| Min clusters | 항상 유지하는 최소 클러스터 수 | 업무 시간: 1, 비업무: 0 |
| Max clusters | 최대 확장 가능 클러스터 수 | 동시 사용자 / 5 (경험값) |
| Auto Stop | 유휴 시 자동 종료 | 5-10분 |
| Scaling Policy | 확장 속도 | Queue 기반 (기본값) |
6.2 Serverless SQL Warehouse IWM (Intelligent Workload Management)
Serverless SQL Warehouse는 IWM 이 자동으로 워크로드를 관리합니다.| IWM 기능 | 설명 | 효과 |
|---|---|---|
| 자동 스케일링 | 쿼리 큐 길이에 따라 자동 확장/축소 | 설정 불필요 |
| 쿼리 우선순위 | 인터랙티브 쿼리 > 배치 쿼리 | 대시보드 응답성 보장 |
| 리소스 격리 | 무거운 쿼리가 가벼운 쿼리를 방해하지 않음 | 동시성 보장 |
| 쿼리 타임아웃 | 장시간 실행 쿼리 자동 종료 | 리소스 낭비 방지 |
참고 Serverless 권장 전략: Serverless SQL Warehouse에서는 여러 작은 Warehouse로 분리하지 말고, 하나의 큰 Warehouse 를 사용하세요. IWM이 자동으로 워크로드를 분배하므로, 분리하면 오히려 리소스 활용률이 낮아집니다.
7. Query Caching 최적화
7.1 Result Cache 히트율 극대화
| Cache 최적화 전략 | 설명 | 효과 |
|---|---|---|
| 고정 날짜 범위 사용 | WHERE date BETWEEN '2026-01-01' AND '2026-03-31' | 동일 쿼리 = Cache 히트 |
| 파라미터화된 쿼리 | 대시보드 필터는 동일 구조 유지 | 필터값이 같으면 히트 |
| MV 활용 | Materialized View로 사전 계산 | Cache와 무관하게 빠름 |
| 비결정적 함수 제거 | current_date() 대신 고정값 | Cache 무효화 방지 |
7.2 Disk Cache 활용
8. 멀티 Warehouse 설계 패턴
8.1 용도별 분리
| Warehouse 이름 | 용도 | 사이즈 | Auto Stop | 사용자 |
|---|---|---|---|---|
| wh-dashboard | 대시보드 서빙 | Medium | 10분 | 전체 사용자 |
| wh-adhoc | Ad-hoc 분석 | Small | 10분 | 분석가 |
| wh-etl | ETL/데이터 변환 | Large | 즉시 종료 | Service Principal |
| wh-bi-tool | Tableau/Power BI | Medium | 10분 | BI 도구 |
| wh-genie | Genie Space | Small | 10분 | 비기술 사용자 |
주의 Serverless에서는 멀티 Warehouse 불필요: Serverless SQL Warehouse의 IWM이 자동으로 워크로드를 격리하므로, 용도별 분리가 불필요합니다. Classic SQL Warehouse에서만 멀티 Warehouse 전략이 효과적입니다.
8.2 비용 최적화를 위한 Warehouse 통합
9. Serverless SQL Warehouse 비용 절감 팁
| 전략 | 설명 | 절감 효과 |
|---|---|---|
| Auto Stop 5분 | Serverless는 즉시 시작하므로 공격적 설정 | 유휴 비용 80%+ 절감 |
| Materialized View | 반복 집계를 사전 계산 | 쿼리당 비용 90% 절감 |
| Liquid Clustering | 스캔량 감소 | 쿼리당 비용 50-90% 절감 |
| Result Cache 활용 | 동일 쿼리 재사용 | 반복 쿼리 비용 0 |
| 쿼리 최적화 | SELECT *, 불필요한 JOIN 제거 | 쿼리당 20-50% 절감 |
| Warehouse 통합 | 여러 개 → 하나로 | 관리 비용 + 유휴 비용 절감 |
참고 링크
- Databricks: SQL Warehouse Sizing
- Databricks: Serverless SQL Warehouse
- Databricks: Materialized Views
- Databricks: Result Caching
- Databricks: Predictive Optimization
- Databricks: System Tables - Billing