본문 바로가기
데이터베이스/snowflake

[snowflake] 비용(크레딧) 소모 3가지 유형

by ordinary_daisy 2024. 2. 13.

개요

snowflake를 사용하다보면 크레딧이 너무 빨리 소모되는 느낌이 들어 최적화를 고려해보신 적 있으신가요?
최적화를 위해선 먼저 어떤 행위를 했을 때 크레딧이 차감되는 지부터 알아야 합니다.
아래 비용이 차감되는 유형에 대해 크게 3가지로 소개해드리겠습니다.

 

 


비용 청구 3가지 구성 요소

Compute를 줄이는 것이 핵심!

  1. Storage
  • 일반적으로 전체 비용에서 아주 낮은 비율
  • 월 기준 1 TB 당 23$ (북미 리전 기준, 리전에 따라 가격 상이)
  • 테이블은 매우 압축되어 저장됨
  1. Compute
  • 비용 청구의 대부분을 담당함
  • 가상 웨어하우스(Virtual Warehouse): 계정의 주요 지출을 차지하는 핵심 요소
    • 가상 웨어하우스 및 컴퓨트 노드의 작동에 사용되는 컴퓨팅 리소스에 따라 크레딧이 차감됨
    • 가상 웨어하우스나 컴퓨트 노드가 일시 중단되면 Snowflake 크레딧이 사용되지 않음
    • 특별한 언급이 없는 경우 가상 웨어하우스나 컴퓨트 노드가 시작되거나 재개될 때 최소한 1분치의 Snowflake 크레딧이 소비됨
    • 이후 가상 웨어하우스와 컴퓨트 노드는 초당으로 청구되며 가장 가까운 정수초로 반올림됨
    • 유연하게 확장 가능한 Scale-Up & Out, Auto Suspend와 Resume, 초당 과금 청구
  • Cloud Service: 일일 사용량이 Warehouse 비용의 10% 이상 사용한 경우에만 요금 부과
    • SHOW 명령문 및 쿼리 결과 캐시 포함한 메타 데이터 compute 비용
  • Serverless: 자동 클러스터링, MView, Search Optimization, Snowpipe, 복제 등
  1. 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

관련 docs 링크

virtural warehouse의 멀티 클러스터 수 설정 변경

    ALTER WAREHOUSE {WAREHOUSE_NAME} SET MAX_CLUSTER_COUNT=N;

    SHOW WAREHOUSES;

관련 docs 링크

쿼리 타임 아웃 설정

  -- 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;

관련 docs 링크

원격 저장소로 분산되는 바이트 양에 따라 문제를 초래하는 상위 쿼리 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

관련 docs 링크


결론

비용 최적화를 위해선 실행하는 쿼리문에 따라 warehouse compute 성능을 다르게 하거나, warehouse의 멀티 클러스터 수를 조절하여 어떤 warehouse 설정이 적절한지 비교해보고 판단해야 합니다.

warehouse 성능 최적화 외에도 주기적인 부하 쿼리문을 식별할 수 있는 모니터링 시스템을 구축하는 게 좋을 것 같습니다.