1. Virtual Warehouse란?
-
Virtual Warehouse = Snowflake의 컴퓨팅 리소스 클러스터에 대한 이름 붙은 추상화(named abstraction)
-
💡 사용자는 named warehouse 객체와만 상호작용하고, 그 아래 실제 컴퓨팅 리소스는 직접 다루지 않음
⭐ Warehouse가 수행하는 작업
공식 문서 기준, warehouse가 running 상태여야 가능:
| 구분 | 작업 | 예시 |
|---|
| DQL | 조회 | SELECT |
| DML | 데이터 변경 | INSERT, UPDATE, DELETE |
| Data Loading | 데이터 적재 | COPY INTO <table> |
| Data Unloading | 데이터 추출 | COPY INTO <location> |
⚠️ 슬라이드에는 DQL(SELECT), DML(UPDATE), Data loading(COPY INTO) 3가지만 표시.
공식 문서는 여기에 Unloading(COPY INTO location)도 포함 → 함께 외우기
- ⭐ Warehouse가 실행 중이면 Snowflake 크레딧(credits)을 소비한다
2. Virtual Warehouse의 핵심 특징
(1) 무제한 확장 + 리소스 경합 없음
- ⭐ 사실상 무제한(virtually unlimited) 개수의 warehouse를 spin up / shut down 가능
- 리소스 경합(resource contention) 없음 → 각 warehouse는 독립적 컴퓨팅 클러스터
- 공식 문서: 각 virtual warehouse는 다른 warehouse와 컴퓨팅 리소스를 공유하지 않으며, 서로 성능에 영향을 주지 않음
(2) On-the-fly 구성 변경
- ⭐ Warehouse 구성(configuration)은 실행 중에도(on-the-fly) 변경 가능 — size 포함
- 공식 문서: "resized at any time, even while running"
- 추가 리소스는 이미 실행 중인 쿼리에 영향 없음 → 프로비저닝 완료 후 대기/신규 쿼리에 사용됨
(3) 로컬 SSD 캐시
- ⭐ Virtual Warehouse는 로컬 SSD 저장소(local SSD storage) 보유
- Storage Layer에서 가져온 raw data를 저장하는 용도
- 이를 통해 후속 쿼리 속도 향상 (warehouse cache 역할)
3. ⭐⭐ Warehouse 관리 SQL 명령어
슬라이드 기준 명령어 정리
DROP WAREHOUSE MY_WAREHOUSE;
CREATE WAREHOUSE MY_MED_WH
WAREHOUSE_SIZE = 'MEDIUM';
ALTER WAREHOUSE MY_WH SUSPEND;
ALTER WAREHOUSE MY_WH_2 SET
WAREHOUSE_SIZE = MEDIUM;
CREATE WAREHOUSE MY_WH_3
MIN_CLUSTER_COUNT = 1
MAX_CLUSTER_COUNT = 3
SCALING_POLICY = STANDARD;
📌 명령어 암기 포인트
DROP : 삭제
CREATE WAREHOUSE : 생성. ⭐ 생성 시 자동으로 현재 세션의 사용 warehouse로 설정됨 (= USE WAREHOUSE와 동일 효과, 공식 문서)
ALTER ... SUSPEND : 일시 정지 / (재개는 RESUME)
ALTER ... SET WAREHOUSE_SIZE : 크기 변경 (실행 중에도 가능)
- ⭐ 기본 생성 크기: Snowsight / CREATE WAREHOUSE → X-Small (공식 문서)
4. ⭐ Warehouse Size & 크레딧
공식 문서 기준 (Gen1 기준 시간당 크레딧 — 2배씩 증가 패턴이 핵심):
| Size | Credits / hour |
|---|
| X-Small | 1 |
| Small | 2 |
| Medium | 4 |
| Large | 8 |
| X-Large | 16 |
| 2X-Large | 32 |
| 3X-Large | 64 |
| 4X-Large | 128 |
| 5X-Large | 256 |
| 6X-Large | 512 |
- ⭐ 한 단계 커질 때마다 크레딧 2배(doubling)
- ⭐ Per-second billing (초당 과금), 단 시작 시 최소 60초(60-second minimum) 과금
- 💡 Larger ≠ 항상 faster (작고 단순한 쿼리는 큰 warehouse라도 빨라지지 않음)
- 💡 데이터 로딩 성능은 warehouse 크기보다 파일 개수/크기의 영향이 더 큼
5. ⭐ Auto-Suspend / Auto-Resume
| 기능 | 기본값 | 동작 |
|---|
| Auto-suspend | 활성(enabled) | 지정 시간 동안 비활성 시 자동 일시정지 → 크레딧 절약 |
| Auto-resume | 활성(enabled) | warehouse가 필요한 쿼리 제출 시 자동 재개 |
- ⭐ Auto-suspend/resume은 개별 클러스터가 아닌 전체 warehouse에만 적용
- 멀티클러스터 경우:
- Auto-suspend: 최소 클러스터 수가 running 중이고 활동이 없을 때만 발생
- Auto-resume: 전체 warehouse가 suspend된 상태일 때만 적용
6. ⭐⭐ Multi-Cluster Warehouse (Enterprise Edition 기능!)
⭐ Multi-cluster warehouse는 Enterprise Edition 이상 기능 (시험 빈출)
- 사용자/쿼리 동시성(concurrency) 관리를 위해 컴퓨팅 리소스를 확장
- 정의 속성:
MAX_CLUSTER_COUNT : 최대 클러스터 수 (1보다 커야 함)
MIN_CLUSTER_COUNT : 최소 클러스터 수 (max 이하)
⭐ 두 가지 모드
| 모드 | 조건 | 설명 |
|---|
| Maximized | MIN = MAX (둘 다 1보다 큼) | 시작 시 모든 클러스터 동시 실행. 정적 제어 |
| Auto-scale | MIN ≠ MAX (MAX > MIN) | 부하에 따라 클러스터 자동 시작/종료 |
⭐ Scaling Policy (Auto-scale 모드에서만 적용)
| 정책 | 특징 |
|---|
| Standard (기본값) | 큐잉(queuing) 최소화 우선 → 크레딧보다 추가 클러스터 시작 우선 |
| Economy | 크레딧 절약 우선 → 실행 중 클러스터를 꽉 채우는 것 우선 (쿼리 대기 가능). 새 클러스터는 최소 6분 이상 바쁠 것으로 추정될 때만 시작 |
- ⭐ Scaling policy는 Auto-scale 모드에서만 의미 있음 (Maximized는 모든 클러스터가 동시 실행되므로 불필요)
- 💡 멀티클러스터는 동시성(concurrency) 향상에 적합. 느린 쿼리/데이터 로딩 성능 개선엔 → resize가 더 효과적
🎯 핵심 요약
- Virtual Warehouse = 컴퓨팅 리소스 클러스터 (CPU/메모리/임시 저장소)
- Running 시 크레딧 소비 / Per-second 과금 + 최소 60초
- Size 한 단계 ↑ = 크레딧 2배, 기본 = X-Small
- 실행 중에도 resize 가능 (on-the-fly)
- 로컬 SSD = warehouse 캐시
- Auto-suspend/resume = 기본 활성, 전체 warehouse 단위
- Multi-cluster = Enterprise Edition 기능
- Maximized(MIN=MAX) vs Auto-scale(MIN<MAX)
- Scaling Policy: Standard(기본, 성능 우선) vs Economy(비용 우선) → Auto-scale에서만
- Multi-cluster = 동시성 ↑ / resize = 성능 ↑