Using Optimization insights to save

Using Optimization insights to save (최적화 인사이트로 절약)

Snowflake는 특정 계정 내에서 Snowflake를 비용에 맞게 최적화할 기회를 식별하는 Optimization insights를 제공해요. 이 인사이트는 주간으로 계산되고 새로고침돼요.

출처: Using Optimization insights to save

본문

각 인사이트는 Snowflake를 최적화해 얼마나 많은 크레딧 또는 테라바이트를 절약할 수 있는지 나타내요.

Optimization insights 타일에 접근하려면:

  1. Snowsight에 로그인해요.
  2. Optimization insights에 접근할 수 있는 역할로 전환해요.
  3. 내비게이션 메뉴에서 Admin » Cost management를 선택해요.
  4. Account Overview 탭을 선택해요.
  5. Optimization insights 타일을 찾아요.

다음 각 인사이트는 지출을 최적화하는 방법에 대한 제안을 포함해요.

  • 인사이트: 자동 클러스터링이 있는 드물게 사용되는 테이블
  • 인사이트: 드물게 사용되는 구체화 뷰
  • 인사이트: 드물게 사용되는 검색 최적화 경로
  • 인사이트: 절대 쿼리되지 않는 큰 테이블
  • 인사이트: 데이터가 기록되지만 읽히지 않는 100GB 초과 테이블
  • 인사이트: 수명이 짧은 영구 테이블
  • 인사이트: 연속 쿼리 사이에 큰 간격이 있는 활성 웨어하우스
  • 인사이트: 다중 클러스터 웨어하우스의 비효율적 사용
  • 인사이트: 상당한 콜드 파일 저장이 있는 테이블

인사이트: 자동 클러스터링이 있는 드물게 사용되는 테이블

이 인사이트는 이 계정에서 주당 100회 미만으로 쿼리되는 자동 클러스터링이 있는 테이블을 식별해요.

테이블에 자동 클러스터링을 활성화하면 그 테이블에 대한 쿼리 성능을 크게 향상시킬 수 있어요. 그러나 테이블이 변경됨에 따라 Snowflake는 테이블을 잘 클러스터링된 상태로 유지하기 위해 서버리스 컴퓨팅 리소스를 사용해야 해요. 테이블에 대해 실행되는 쿼리 수가 최소라면, 발생하는 비용이 성능 향상을 정당화하지 못할 수 있어요.

권장 사항: 이 테이블들에서 자동 클러스터링을 비활성화하는 것을 고려해요. 자동 클러스터링을 끄기 전에 테이블이 재해 복구 목적으로만 존재하는지, 또는 데이터 공유를 통해 다른 Snowflake 계정이 사용하는지 확인해요. 이것이 자주 접근되지 않는 이유를 설명할 수 있어요.

예를 들어 t1이라는 테이블의 자동 클러스터링을 비활성화하려면 다음 명령을 실행해요.

ALTER TABLE t1 SUSPEND RECLUSTER;

인사이트: 드물게 사용되는 구체화 뷰

이 인사이트는 이 계정에서 주당 10회 미만으로 쿼리되는 구체화 뷰를 식별해요.

구체화 뷰를 만들면 특정 쿼리 패턴에 대한 성능을 크게 향상시킬 수 있어요. 그러나 구체화 뷰는 구체화 뷰를 새 데이터로 최신 상태로 유지하는 것과 관련된 서버리스 컴퓨팅 비용뿐 아니라 추가 저장 비용도 발생시켜요. 구체화 뷰에 대해 실행되는 쿼리 수가 최소라면, 발생하는 비용이 성능 향상을 정당화하지 못할 수 있어요.

권장 사항: 구체화 뷰를 제거하거나 업데이트를 일시 중지하는 것을 고려해요. 구체화 뷰를 드롭하기 전에 구체화 뷰가 재해 복구 목적으로만 존재하는지, 또는 데이터 공유를 통해 다른 Snowflake 계정이 사용하는지 확인해요. 이것이 자주 접근되지 않는 이유를 설명할 수 있어요.

예를 들어 mv1이라는 구체화 뷰를 삭제하려면 다음 명령을 실행해요.

DROP MATERIALIZED VIEW mv1;

인사이트: 드물게 사용되는 검색 최적화 경로

이 인사이트는 이 계정에서 주당 10회 미만으로 사용되는 검색 최적화 접근 경로를 식별해요.

검색 최적화는 검색 접근 경로를 사용해 특정 유형의 포인트 조회와 분석 쿼리의 성능을 향상시켜요. 테이블에 검색 최적화를 추가하면 이러한 쿼리에 대한 성능을 크게 향상시킬 수 있어요. 그러나 검색 최적화는 그 저장을 최신 상태로 유지하는 것과 관련된 서버리스 컴퓨팅 비용뿐 아니라 추가 저장 비용도 발생시켜요. 검색 최적화가 만든 검색 접근 경로를 사용하는 쿼리 수가 최소라면, 발생하는 비용이 성능 향상을 정당화하지 못할 수 있어요.

권장 사항: 테이블에서 검색 최적화를 제거하는 것을 고려해요. 검색 최적화를 제거하기 전에 테이블이 재해 복구 목적으로만 존재하는지, 또는 데이터 공유를 통해 다른 Snowflake 계정이 사용하는지 확인해요. 이것이 자주 접근되지 않는 이유를 설명할 수 있어요.

예를 들어 t1이라는 테이블에서 검색 최적화를 완전히 제거하려면 다음 명령을 실행해요.

ALTER TABLE t1 DROP SEARCH OPTIMIZATION;

인사이트: 절대 쿼리되지 않는 큰 테이블

이 인사이트는 이 계정에서 지난 주 동안 쿼리되지 않은 큰 테이블을 식별해요.

권장 사항: 어떤 워크로드에도 영향을 주지 않고 저장 비용을 줄일 수 있는 사용하지 않는 테이블 삭제를 고려해요. 테이블을 드롭하기 전에 테이블이 재해 복구 목적으로만 존재하는지, 또는 데이터 공유를 통해 다른 Snowflake 계정이 사용하는지 확인해요. 이것이 자주 접근되지 않는 이유를 설명할 수 있어요.

예를 들어 t1이라는 테이블을 삭제하려면 다음 명령을 실행해요.

DROP TABLE t1;

인사이트: 데이터가 기록되지만 읽히지 않는 100GB 초과 테이블

이 인사이트는 데이터가 기록되지만 이 계정에서 절대 읽히지 않는 100GB 초과 테이블을 식별해요.

권장 사항: 데이터가 절대 읽히지 않는다면 Snowflake에 데이터를 저장하고 새 데이터를 수집하는 것은 낭비일 수 있어요. 저장 비용을 절약하려면 이 테이블들을 드롭하거나, 수집에 소비되는 크레딧을 절약하려면 새 데이터 쓰기를 중단하는 것을 고려해요. 테이블을 드롭하기 전에 테이블이 재해 복구 목적으로만 존재하는지, 또는 데이터 공유를 통해 다른 Snowflake 계정이 사용하는지 확인해요. 이것이 읽히지 않는 이유를 설명할 수 있어요.

예를 들어 t1이라는 테이블을 드롭하려면 다음 명령을 실행해요.

DROP TABLE t1;

인사이트: 수명이 짧은 영구 테이블

이 인사이트는 생성 후 24시간 내에 삭제된 100GB 초과 테이블을 식별해요.

권장 사항: 데이터가 짧은 시간 동안만 유지되어야 한다면 향후 테이블에 임시 테이블(temporary table) 또는 일시적 테이블(transient table)을 사용하는 것을 고려해요. 임시 테이블이나 일시적 테이블을 사용하면 Fail-safe와 Time Travel 비용을 절약하는 데 도움이 될 수 있어요.

예를 들어 새 일시적 테이블 t1을 만들려면 다음 명령을 실행해요.

CREATE TRANSIENT TABLE t1;

인사이트: 연속 쿼리 사이에 큰 간격이 있는 활성 웨어하우스

활성 웨어하우스는 어떤 쿼리도 실행하지 않아도 크레딧을 소비해요. 이 인사이트는 활성인 시간 중 50% 이상 동안 유휴(쿼리 실행 안 함) 상태인 웨어하우스를 식별해요.

권장 사항: 웨어하우스가 일시 중지되기 전에 유휴 상태로 남아 있는 시간을 결정하는 auto-suspend 설정을 낮추는 것을 고려해요. 일시 중지된 웨어하우스는 비용이 발생하지 않아요. 비용을 최적화하려면 auto-suspend를 5분 이하로 설정할 수 있어요.

auto-suspend 시간 제한을 낮추면 캐시 사용을 줄여 때때로 쿼리 성능이 나빠질 수 있다는 점을 명심해요. 자세한 내용은 About the cache and auto-suspension을 참고해요.

예를 들어 wh1이라는 웨어하우스의 auto-suspend 시간 제한을 1분으로 설정하려면 다음 명령을 실행해요.

ALTER WAREHOUSE wh1 AUTO_SUSPEND = 60;

인사이트: 다중 클러스터 웨어하우스의 비효율적 사용

이 인사이트는 다중 클러스터 웨어하우스에 대한 최소·최대 클러스터 수가 같은 값으로 설정되어 있어 웨어하우스가 수요에 대응해 확장·축소할 수 없는 경우를 식별해요. 다중 클러스터 웨어하우스가 사용량이 더 적은 기간에 축소될 수 있다면 크레딧을 절약할 수 있어요.

권장 사항: 다중 클러스터 웨어하우스가 사용량이 더 적은 기간에 축소될 수 있도록 최소 클러스터 수를 낮추는 것을 고려해요.

예를 들어 wh1이라는 웨어하우스의 최소 클러스터 수를 1로 설정하려면 다음 명령을 실행해요.

ALTER WAREHOUSE wh1 SET MIN_CLUSTER_COUNT = 1;

인사이트: 상당한 콜드 파일 저장이 있는 테이블

이 인사이트는 100GB 이상의 콜드(접근되지 않은) 파일 저장이 있는 테이블을 식별해요. 콜드 파일은 테이블 내에서 1년 동안 어떤 쿼리도 접근하지 않은 파일이에요. 표준 저장 요금으로 많은 양의 콜드 데이터를 저장하면 불필요한 비용이 발생할 수 있어요.

권장 사항: 자주 접근되지 않는 데이터를 더 낮은 비용의 아카이브 저장 계층으로 자동으로 이동하는 저장 수명 주기 정책(storage lifecycle policy)을 만드는 것을 고려해요.

예를 들어 365일보다 오래된 행을 아카이브하는 저장 수명 주기 정책을 만들고 t1이라는 테이블에 연결하려면 다음 명령을 실행해요.

CREATE STORAGE LIFECYCLE POLICY archive_cold_data
  AS (event_ts TIMESTAMP)
  RETURNS BOOLEAN ->
    event_ts < DATEADD(DAY, -365, CURRENT_TIMESTAMP())
  ARCHIVE_TIER = COLD
  ARCHIVE_FOR_DAYS = 730;

ALTER TABLE t1 ADD STORAGE LIFECYCLE POLICY archive_cold_data
  ON (created_at);

자세한 내용은 Storage lifecycle policy commands를 참고해요.

더 알아보기