비용 최적화하기

이 항목에서는 비용을 절감하고 지출을 극대화하기 위해 Snowflake를 최적화하는 방법에 대해 설명합니다.

비용에 맞게 클라우드 서비스 최적화하기

클라우드 서비스 사용량 이 예상보다 높은 경우 Snowflake 사용이 다음 패턴을 따르는지 확인하십시오. 각 패턴에는 클라우드 서비스와 관련된 비용을 줄이는 데 도움이 될 수 있는 권장 사항이 포함됩니다.

패턴: 트랜잭션 잠금으로 인해 쿼리가 차단됨

업데이트 및 병합 명령은 테이블에 트랜잭션 잠금을 설정하여 잠금이 해제될 때까지 해당 테이블에서 다른 명령이 실행되지 않도록 합니다. 쿼리는 잠금이 해제될 때까지 기다리는 동안 클라우드 서비스 크레딧을 소비합니다. 쿼리가 잠금을 기다리는 클라우드 서비스 계층에 오래 머물수록 더 많은 크레딧이 소비됩니다.

권장 사항: 사용자가 단일 테이블에서 동시 업데이트/병합 명령을 실행할 때, 특히 각 명령이 몇 개의 행만 업데이트할 때 트랜잭션 잠금이 자주 발생합니다. 단일 업데이트가 아닌 배치 명령을 사용하여 이러한 잠금을 최소화할 수 있습니다. 이 전략에서는 다음을 수행합니다.

  1. 배치 INSERT 문을 사용하여 새 데이터를 임시 테이블에 로드합니다. 단일 행 삽입을 사용하지 마십시오. 새로운 데이터를 지속적으로 로드하는 API 호출도 단일 행 삽입이 아닌 배치 삽입을 제출하는 방식으로 설계되어야 합니다.

  2. 임시 테이블을 사용하여 대상 테이블을 업데이트/병합합니다.

원본이 종일 계속해서 새 데이터를 전송하는 경우 작업 을 사용하여 주기적으로 대상 테이블을 업데이트해 보십시오.

패턴: 선택성이 부족한 복사 명령

복사 명령을 실행하면 Amazon Simple Storage Service(S3)의 파일이 나열됩니다. 목록 파일은 클라우드 서비스 컴퓨팅만 사용하므로 선택성이 부족한 복사 명령을 실행하면 클라우드 서비스 사용량이 증가할 수 있습니다.

권장 사항: 필요한 대상 파일만 나열되도록 일종의 날짜 접두사를 포함하게끔 S3 버킷의 구조를 변경하는 것이 좋습니다.

패턴: 빈도가 높은 DDL 작업 및 복제

데이터 정의 언어(DDL) 작업, 특히 복제는 전적으로 메타데이터 작업인데, 이는 곧 클라우드 서비스 컴퓨팅만 사용한다는 의미입니다. 대규모 스키마나 테이블을 자주 생성 또는 삭제하거나 백업을 위해 데이터베이스를 복제하면 상당한 클라우드 서비스 사용량이 발생할 수 있습니다.

권장 사항: 복제는 전체 복사 수행에 필요한 리소스의 일부만 사용하므로 복제를 계속해야 합니다. 복제 패턴을 검토하여 가능한 한 세분화되어 있고 너무 자주 실행되지 않도록 하십시오. 예를 들어 전체 스키마가 아닌 개별 테이블만 복제할 수 있습니다.

패턴: 빈도가 높고 간단한 쿼리

단일 단순 쿼리를 통한 클라우드 서비스 소비는 무시할 수준이지만 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 명령은 전적으로 메타데이터 작업이며, 이는 곧 클라우드 서비스 리소스만 소비한다는 의미입니다. 이 패턴은 일반적으로 SHOW 명령을 높은 빈도로 실행하는 Snowflake를 기반으로 하는 애플리케이션을 개발한 경우에 발생합니다. 서드 파티 도구에서 이러한 명령을 시작할 수도 있습니다.

권장 사항: 쿼리 빈도를 검토하고 빈도가 사용 사례에 맞춰 적절하게 설정되어 있는지 확인하십시오. 파트너 도구의 경우 파트너에게 연락하여 사용량을 조정할 계획이 있는지 확인하십시오.

패턴: 단일 행 삽입 및 조각난 스키마(데이터 애플리케이션별)

Snowflake는 OLTP 시스템이 아니므로 단일 행 삽입은 차선책이며 상당한 클라우드 서비스 리소스를 소비할 수 있습니다.

고객당 하나의 스키마를 정의하는 데이터 애플리케이션을 만들면 특정 기간에 여러 데이터 로드가 발생하여 클라우드 서비스 소비량이 증가할 수 있습니다.

또한 이 패턴으로 인해 Snowflake가 유지 관리해야 하는 메타데이터가 훨씬 더 많아지는데, 메타데이터 작업은 클라우드 서비스 리소스를 소비합니다. 각 메타데이터 작업은 개별적으로 최소한의 리소스를 소비하지만 전체적으로는 소비량이 상당할 수 있습니다.

권장 사항: 일반적으로 단일 행 삽입보다는 배치 로드 또는 대량 로드를 수행합니다.

공유 스키마를 사용하는 것이 훨씬 더 효율적이므로 비용이 절감됩니다. customer_ID 의 모든 테이블을 클러스터링하고 보안 뷰 를 사용하는 것이 좋습니다.

패턴: 복잡한 SQL 쿼리

쿼리에 조인/데카르트 곱이 많이 포함되거나, 큰 목록에 IN 연산자를 사용하거나, 매우 큰 쿼리인 경우 쿼리 실행 시 상당한 클라우드 서비스 컴퓨팅을 소비할 수 있습니다. 이러한 유형의 쿼리는 모두 컴파일 시간이 깁니다.

권장 사항: 쿼리를 검토하여 의도한 작업을 수행 중인지 확인하십시오. Snowflake는 이러한 쿼리를 지원하며 소비된 리소스에 대해서만 비용을 청구합니다.