개요
snowflake를 사용하다보면 크레딧이 너무 빨리 소모되는 느낌이 들어 최적화를 고려해보신 적 있으신가요?
최적화를 위해선 먼저 어떤 행위를 했을 때 크레딧이 차감되는 지부터 알아야 합니다.
아래 비용이 차감되는 유형에 대해 크게 3가지로 소개해드리겠습니다.
비용 청구 3가지 구성 요소
Compute를 줄이는 것이 핵심!
- Storage
- 일반적으로 전체 비용에서 아주 낮은 비율
- 월 기준 1 TB 당 23$ (북미 리전 기준, 리전에 따라 가격 상이)
- 테이블은 매우 압축되어 저장됨
- Compute
- 비용 청구의 대부분을 담당함
- 가상 웨어하우스(Virtual Warehouse): 계정의 주요 지출을 차지하는 핵심 요소
- 가상 웨어하우스 및 컴퓨트 노드의 작동에 사용되는 컴퓨팅 리소스에 따라 크레딧이 차감됨
- 가상 웨어하우스나 컴퓨트 노드가 일시 중단되면 Snowflake 크레딧이 사용되지 않음
- 특별한 언급이 없는 경우 가상 웨어하우스나 컴퓨트 노드가 시작되거나 재개될 때 최소한 1분치의 Snowflake 크레딧이 소비됨
- 이후 가상 웨어하우스와 컴퓨트 노드는 초당으로 청구되며 가장 가까운 정수초로 반올림됨
- 유연하게 확장 가능한 Scale-Up & Out, Auto Suspend와 Resume, 초당 과금 청구
- Cloud Service: 일일 사용량이 Warehouse 비용의 10% 이상 사용한 경우에만 요금 부과
- SHOW 명령문 및 쿼리 결과 캐시 포함한 메타 데이터 compute 비용
- Serverless: 자동 클러스터링, MView, Search Optimization, Snowpipe, 복제 등
- DATA TRANSFER & EGRESS
- 일반적으로 전체 비용에서 아주 낮은 비율
- Snowflake 서비스를 운영하는 데 사용되는 클라우드 서비스 컴퓨트-시간에 따라 크레딧이 차감됨
- Cloud service provider specific
- COPY, 복제, 외부 함수 기능 포함
비용 최적화를 위한 관리 방안
virtual warehouse type별 차감 Credit 확인하여, 적절한 성능을 설정
Warehosue Types | Credits/시간 | Instance Nodes | Virtual CPUs |
---|---|---|---|
XS | 1 | 1 | 8 |
S | 2 | 2 | 16 |
M | 4 | 4 | 32 |
L | 8 | 8 | 64 |
XL | 16 | 16 | 128 |
2XL | 32 | 32 | 256 |
3XL | 64 | 64 | 512 |
4XL | 128 | 128 | 1024 |
5XL | 256 | Double Capacity | Double Capacity |
6XL | 512 | Double Capacity | Double Capacity |
virtural warehouse의 멀티 클러스터 수 설정 변경
ALTER WAREHOUSE {WAREHOUSE_NAME} SET MAX_CLUSTER_COUNT=N;
SHOW WAREHOUSES;
쿼리 타임 아웃 설정
-- ACCOUNT 단위 설정값 변경
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN ACCOUNT;
ALTER ACCOUNT SET STATEMENT_TIMEOUT_IN_SECONDS=10800;
-- WAREHOUSE 단위 설정값 변경
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN WAREHOUSE {WAREHOUSE_NAME};
ALTER WAREHOUSE {WAREHOUSE_NAME} SET STATEMENT_TIMEOUT_IN_SECONDS=3600;
-- SESSION 단위 설정값 변경
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN SESSION;
ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS=3600;
원격 저장소로 분산되는 바이트 양에 따라 문제를 초래하는 상위 쿼리 10개를 식별
select query_id, substr(query_text, 1, 50) partial_query_text, user_name, warehouse_name, warehouse_size, BYTES_SPILLED_TO_REMOTE_STORAGE, start_time, end_time, total_elapsed_time/1000 total_elapsed_time
from snowflake.account_usage.query_history
where BYTES_SPILLED_TO_REMOTE_STORAGE > 0
and start_time::date > dateadd('days', -45, current_date)
order by BYTES_SPILLED_TO_REMOTE_STORAGE desc limit 10 ;
쿼리 캐시 활성화/비활성화
ALTER ACCOUNT SET USE_CACHED_RESULT = TRUE | FALSE
결론
비용 최적화를 위해선 실행하는 쿼리문에 따라 warehouse compute 성능을 다르게 하거나, warehouse의 멀티 클러스터 수를 조절하여 어떤 warehouse 설정이 적절한지 비교해보고 판단해야 합니다.
warehouse 성능 최적화 외에도 주기적인 부하 쿼리문을 식별할 수 있는 모니터링 시스템을 구축하는 게 좋을 것 같습니다.
'데이터베이스 > snowflake' 카테고리의 다른 글
[snowflake] 현재 날짜 및 시간을 반환하는 함수 (0) | 2025.01.10 |
---|---|
[snowflake] snowflake DashBoard 사용법 (0) | 2024.07.23 |
[snowflake] send to email in snowflake, snowflake CALL SYSTEM$SEND_EMAIL (0) | 2024.07.23 |
[snowflake] snowflake Connected IP List Selection (0) | 2024.07.23 |