Optimizing cloud services for cost
Optimizing cloud services for cost (클라우드 서비스 비용 최적화)
클라우드 서비스 사용량이 예상보다 높다면 내 Snowflake 사용이 다음 패턴 중 하나를 따르는지 확인해요. 각 패턴에는 클라우드 서비스와 관련된 비용을 줄이는 데 도움이 될 수 있는 권장 사항이 포함돼요.
본문
- 패턴: 선택도(selectivity)가 낮은 Copy 명령
- 패턴: 고빈도 DDL 작업과 클로닝
- 패턴: 고빈도 단순 쿼리
- 패턴: 고빈도 INFORMATION_SCHEMA 쿼리
- 패턴: 고빈도 SHOW 명령(데이터 애플리케이션과 타사 도구)
- 패턴: 단일 행 삽입과 파편화된 스키마(데이터 애플리케이션)
- 패턴: 복잡한 SQL 쿼리
패턴: 선택도가 낮은 Copy 명령
Copy 명령 실행은 Amazon Simple Storage Service(S3)에서 파일을 나열하는 것을 포함해요. 파일 나열은 클라우드 서비스 컴퓨팅만 사용하므로, 선택도가 낮은 Copy 명령을 실행하면 클라우드 서비스 사용량이 높아질 수 있어요.
권장 사항: 필요한 대상 파일만 나열할 수 있도록 S3 버킷 구조에 날짜 접두사 같은 것을 포함하도록 변경하는 것을 고려해요.
패턴: 고빈도 DDL 작업과 클로닝
데이터 정의 언어(DDL) 작업, 특히 클로닝은 완전히 메타데이터 작업이므로 클라우드 서비스 컴퓨팅만 사용해요. 큰 스키마나 테이블을 자주 생성·삭제하거나 백업을 위해 데이터베이스를 클로닝하면 상당한 클라우드 서비스 사용량이 발생할 수 있어요.
권장 사항: 클로닝은 딥 카피(deep copy)에 필요한 리소스의 극히 일부만 사용하므로 계속 클로닝해야 해요. 클로닝 패턴을 검토해 가능한 한 세분화되어 있고 너무 자주 실행되지 않는지 확인해요. 예를 들어 전체 스키마 대신 개별 테이블만 클로닝하고 싶을 수 있어요.
패턴: 고빈도 단순 쿼리
단일 단순 쿼리의 클라우드 서비스 소비는 무시할 만하지만, SELECT 1, SELECT sequence1.NEXTVAL, SELECT CURRENT_SESSION() 같은 쿼리를 매우 높은 빈도(하루 수만 회)로 실행하면 상당한 클라우드 서비스 사용량이 발생할 수 있어요.
권장 사항: 쿼리 빈도를 검토하고 그 빈도가 내 사용 사례에 적절하게 설정되었는지 결정해요. JDBC 드라이버를 사용하는 파트너 도구에서 SELECT CURRENT_SESSION() 쿼리가 높은 빈도로 발생하는 것을 관찰하면, 파트너가 SnowflakeConnection 인터페이스의 getSessionId() 메서드를 사용하도록 코드를 업데이트했는지 확인해요. 이는 캐싱을 활용하고 클라우드 서비스 사용량을 줄여요.
패턴: 고빈도 INFORMATION_SCHEMA 쿼리
Snowflake Information Schema에 대한 쿼리는 클라우드 서비스 리소스만 소비해요. INFORMATION_SCHEMA 뷰에 대한 단일 쿼리의 클라우드 서비스 소비는 무시할 만하지만, 이러한 쿼리를 매우 높은 빈도(하루 수만 회)로 실행하면 상당한 클라우드 서비스 사용량이 발생할 수 있어요.
권장 사항: 쿼리 빈도를 검토하고 그 빈도가 내 사용 사례에 적절하게 설정되었는지 결정해요. 또는 INFORMATION_SCHEMA 뷰 대신 ACCOUNT_USAGE 스키마의 뷰를 쿼리할 수 있어요. ACCOUNT_USAGE 스키마를 쿼리하면 클라우드 서비스가 아니라 가상 웨어하우스를 사용해요.
패턴: 고빈도 SHOW 명령(데이터 애플리케이션과 타사 도구)
SHOW 명령은 완전히 메타데이터 작업이므로 클라우드 서비스 리소스만 소비해요. 이 패턴은 보통 Snowflake 위에 구축된 애플리케이션이 높은 빈도로 SHOW 명령을 실행할 때 발생해요. 이 명령은 타사 도구에 의해 시작될 수도 있어요.
권장 사항: 쿼리 빈도를 검토하고 그 빈도가 내 사용 사례에 적절하게 설정되었는지 결정해요. 파트너 도구의 경우 파트너에게 그 사용량을 조정할 계획이 있는지 문의해요.
패턴: 단일 행 삽입과 파편화된 스키마(데이터 애플리케이션)
Snowflake는 OLTP 시스템이 아니므로 단일 행 삽입은 최적이 아니고 상당한 클라우드 서비스 리소스를 소비할 수 있어요.
고객별로 하나의 스키마를 정의하는 데이터 애플리케이션을 구축하면 주어진 기간에 여러 데이터 적재가 발생할 수 있고, 이는 높은 클라우드 서비스 소비를 초래할 수 있어요.
이 패턴은 또한 Snowflake가 유지해야 할 메타데이터가 훨씬 많아지게 하고, 메타데이터 작업은 클라우드 서비스 리소스를 소비해요. 각 메타데이터 작업은 개별적으로 최소 리소스를 소비하지만, 합산하면 소비가 상당할 수 있어요.
권장 사항: 일반적으로 단일 행 삽입 대신 배치 또는 대량 적재를 해요.
공유 스키마를 사용하는 것이 훨씬 더 효율적이라 비용을 절약해요. 모든 테이블을 customer_ID에 클러스터하고 보안 뷰(secure views)를 사용하고 싶을 가능성이 높아요.
패턴: 복잡한 SQL 쿼리
쿼리가 많은 조인/카테시안 곱, 큰 목록이 있는 IN 연산자 사용, 또는 매우 큰 쿼리를 포함하면 상당한 클라우드 서비스 컴퓨팅을 소비할 수 있어요. 이러한 유형의 쿼리는 모두 높은 컴파일 시간을 가져요.
권장 사항: 쿼리를 검토해 의도한 대로 작동하는지 확인해요. Snowflake는 이러한 쿼리를 지원하고 소비된 리소스에 대해서만 청구해요.
더 알아보기
- Optimizing cost — 비용 최적화 개요
- Understanding cloud services cost — 클라우드 서비스 비용 이해