Cost controls for warehouses
Cost controls for warehouses (웨어하우스 비용 제어)
이 주제는 가상 웨어하우스 사용에 얼마를 지출하는지 제한하는 데 사용할 수 있는 제어를 논의해요. 이 제어는 가상 웨어하우스 사용의 실제 비용이 예상 비용을 초과하지 않도록 보장하는 데 도움을 줘요.
본문
이 제어는 클라우드 서비스와 서버리스 기능에는 적용되지 않아요.
웨어하우스에 대한 접근 제어
누가 웨어하우스로 작업할 수 있고 그 웨어하우스로 무엇을 할 수 있는지 신중히 정의하면 컴퓨팅 리소스 사용을 비용 효율적인 구성이 있는 알려진 웨어하우스로 제한해 비용을 제어하는 데 도움이 돼요. Snowflake의 세분화된 접근 제어는 웨어하우스에 대해 다음 권한을 부여할 수 있게 해줘요.
- CREATE WAREHOUSE — 전역 권한(즉, 계정에 부여됨)으로 어떤 역할이 새 웨어하우스를 만들 수 있는지 제한해, 개인이 비용 제어가 마련된 기존 웨어하우스를 사용하도록 강제할 수 있게 해줘요.
- MODIFY — 특정 웨어하우스의 권한으로 비용에 영향을 주는 설정 변경(웨어하우스 크기 조정, auto-suspend 설정 비활성화 포함)을 허용해요. 흔히 사용자는 특정 워크로드를 위해 웨어하우스 크기를 늘린 뒤 원래 크기로 되돌리는 것을 잊어버리는데, 이는 비용에 큰 영향을 줄 수 있어요.
- USAGE — 특정 웨어하우스의 권한으로 그 웨어하우스를 활성화해 쿼리와 다른 SQL 동작에 컴퓨팅 리소스를 제공하게 해요. 이 권한을 신중히 할당하면 사용자가 자신의 워크로드에 적절한 크기와 구성을 가진 웨어하우스만 사용할 수 있게 보장해요.
웨어하우스 생성·확장 책임을 팀의 소수 구성원에게 중앙화하는 것이 모범 사례로 간주돼요. 모든 웨어하우스를 생성·수정할 수 있는 권한이 있는 전용 역할을 만든 뒤, 그 역할을 제한된 수의 사용자에게 부여할 수 있어요. 이를 통해 웨어하우스 정책을 제어하고 웨어하우스가 예기치 않게 생성되거나 업사이즈되어 발생하는 우발적 비용 초과를 방지할 수 있어요.
팁
더 까다로운 워크로드를 처리하기 위해 웨어하우스를 확장할 수 있는 능력을 원하지만, 사용자가 나중에 크기를 조정하는 것을 잊을까 봐 웨어하우스 크기를 늘리는 능력을 주고 싶지 않다면 다중 클러스터 웨어하우스(multi-cluster warehouse) 사용을 고려해요. 다중 클러스터 웨어하우스는 워크로드가 변동함에 따라 자동으로 확장돼요.
웨어하우스에 설정할 수 있는 모든 권한 목록은 Virtual warehouse privileges를 참고해요.
쿼리 시간 제한
헝(hung) 쿼리는 예상보다 오래 실행되므로 과도한 크레딧을 소비해요. 통제 불능 쿼리와 관련된 추가 비용을 피하려면 STATEMENT_TIMEOUT_IN_SECONDS 파라미터를 설정해 SQL 문장이 취소되기 전에 실행할 수 있는 최대 시간을 정의할 수 있어요.
STATEMENT_TIMEOUT_IN_SECONDS 파라미터는 전체 계정, 사용자, 세션, 또는 특정 웨어하우스에 대해 설정할 수 있어서 다양한 워크로드의 예상 실행 시간에 맞는 시간 한도를 신중히 설정할 수 있게 해요. 이 파라미터는 기본적으로 계정 수준에서 설정돼요. 세션 외에도 웨어하우스에 파라미터가 설정되면 가장 낮은 0이 아닌 값이 강제돼요.
현재 쿼리 시간 한도를 보려면 다음 명령을 사용해요.
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN ACCOUNT;
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN USER <username>;
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN SESSION;
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' IN WAREHOUSE <warehouse_name>;
시간 한도를 조정해야 한다면 다음 명령 중 하나를 사용해요.
ALTER ACCOUNT SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER USER <username> SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER WAREHOUSE <warehouse_name> SET STATEMENT_TIMEOUT_IN_SECONDS = <number_of_seconds>;
문장 대기열 시간 제한
웨어하우스를 사용하기 위해 큐에 있는 SQL 문장은 크레딧을 소비하지 않아요. 그러나 쿼리가 큐에 너무 오래 있으면 실행될 때쯤 더 이상 관련이 없을 수도 있어요. 더 이상 관련이 없는 쿼리를 실행하는 것은 크레딧을 낭비하므로, SQL 문장이 취소되기 전에 큐에 있을 수 있는 최대 시간을 설정해 비용 제어를 구현할 수 있어요.
SQL 문장이 큐에 머무는 시간을 제어하는 파라미터는 STATEMENT_QUEUED_TIMEOUT_IN_SECONDS예요. 이 파라미터는 전체 계정, 사용자, 세션, 또는 특정 웨어하우스에 대해 설정할 수 있어요. 이 파라미터는 기본적으로 계정 수준에서 설정돼요. 세션 외에도 웨어하우스에 파라미터가 설정되면 가장 낮은 0이 아닌 값이 강제돼요.
현재 큐 시간 한도를 보려면 다음 명령을 사용해요.
SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN ACCOUNT;
SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN USER <username>;
SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN SESSION;
SHOW PARAMETERS LIKE 'STATEMENT_QUEUED_TIMEOUT_IN_SECONDS' IN WAREHOUSE <warehouse_name>;
시간 한도를 조정해야 한다면 다음 명령 중 하나를 사용해요.
ALTER ACCOUNT SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER USER <username> SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER SESSION SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
ALTER WAREHOUSE <warehouse_name> SET STATEMENT_QUEUED_TIMEOUT_IN_SECONDS = <number_of_seconds>;
자동 일시 중지 사용
기본적으로 모든 웨어하우스는 auto-suspend 설정이 활성화되어 있어, 웨어하우스가 정의된 기간 동안 비활성이면 자동으로 종료돼요. 일시 중지된 웨어하우스는 크레딧을 소비하지 않으므로, 웨어하우스는 워크로드를 처리할 때만 비용을 발생시켜요.
사용자가 auto-suspend 설정을 비활성화하지 못하게 제한하면 사용하지 않는 웨어하우스가 크레딧을 낭비하는 것을 방지하는 데 도움이 돼요. 접근 제어를 사용해 누군가 웨어하우스를 사용하게 하면서도 그 Auto Suspend 설정을 수정하지 못하게 할 수 있어요.
쿼리: auto-suspend가 없는 웨어하우스 찾기
다음 쿼리를 사용해 어떤 웨어하우스에 대해 auto-suspend 설정이 비활성화되었는지 주기적으로 확인해요.
SHOW WAREHOUSES
->> SELECT "name" AS WAREHOUSE_NAME,
"size" AS WAREHOUSE_SIZE
FROM $1
WHERE IFNULL("auto_suspend", 0) = 0;
꺼진 웨어하우스에 대해 auto-suspend를 활성화하려면 Snowsight에 로그인하고 내비게이션 메뉴에서 Compute » Warehouses를 선택해요. ALTER WAREHOUSE 명령의 AUTO_SUSPEND 파라미터를 사용할 수도 있어요.
auto-suspend와 함께 auto-resume 사용
일반적으로 auto-suspend가 활성화된 모든 웨어하우스는 auto-resume도 활성화해야 해요. 두 설정의 조합은 웨어하우스의 워크로드가 변동함에 따라 웨어하우스를 자동으로 중지하고 시작해요.
쿼리: Auto Resume이 없는 웨어하우스 찾기
다음 쿼리는 auto-resume이 활성화되지 않은 웨어하우스를 나열해, 어느 것을 수정해야 하는지 알려줘요.
SHOW WAREHOUSES
->> SELECT "name" AS WAREHOUSE_NAME,
"size" AS WAREHOUSE_SIZE
FROM $1
WHERE "auto_resume" = 'false';
꺼진 웨어하우스에 대해 auto-resume을 활성화하려면 Snowsight에 로그인하고 내비게이션 메뉴에서 Compute » Warehouses를 선택해요. ALTER WAREHOUSE 명령의 AUTO_RESUME 파라미터를 사용할 수도 있어요.
지출 한도 강제
리소스 모니터는 특정 시간 간격 또는 날짜 범위 동안 웨어하우스가 소비하는 크레딧에 대한 한도를 설정하는 기능을 제공해요. 이는 웨어하우스가 일반적으로 예상되는 것보다 더 많은 크레딧을 의도치 않게 소비하는 것을 방지하는 데 도움이 될 수 있어요.
때로 리소스 모니터는 크레딧 한도에 도달하면 단순히 관리자에게 알리지만, 한도에 도달하는 즉시 웨어하우스를 일시 중지하도록 리소스 모니터를 구성해 한도를 강제할 수도 있어요. 한도를 강제할 때 두 가지 옵션이 있어요: 대기 중인 문장이 실행된 후 웨어하우스를 일시 중지하거나, 문장이 완료될 때까지 기다리지 않고 즉시 일시 중지.
단일 리소스 모니터는 여러 웨어하우스 또는 계정 전체에 설정될 수 있으므로, 전체 지출 한도에 도달하면 효과적으로 여러 웨어하우스를 일시 중지할 수 있어요. 웨어하우스는 자체 리소스 모니터와 계정별 리소스 모니터에 동시에 할당될 수 있어요. 크레딧 한도 중 하나에 도달하면 웨어하우스가 일시 중지돼요.
지출 한도에 도달했을 때 웨어하우스를 일시 중지하는 방법에 대한 자세한 내용은 Working with resource monitors를 참고해요.
쿼리: 리소스 모니터가 없는 웨어하우스 찾기
다음 쿼리는 웨어하우스별 리소스 모니터에 할당되지 않은 웨어하우스를 나열해, 통제 불능 비용에 취약하게 만든다. 이 쿼리는 계정 수준 리소스 모니터를 확인하지 않아요. 계정 수준 리소스 모니터가 있는 계정에 속한 목록의 웨어하우스는 여전히 크레딧 한도의 적용을 받아요.
SHOW WAREHOUSES
->> SELECT "name" AS WAREHOUSE_NAME,
"size" AS WAREHOUSE_SIZE
FROM $1
WHERE "resource_monitor" = 'null';
참고
Snowflake 아키텍처의 클라우드 서비스 계층은 리소스 모니터에 의해 일시 중지된 웨어하우스에 대해 쿼리가 실행되면 여전히 약간의 비용이 발생할 수 있어요.
더 알아보기
- Controlling cost — 비용 제어 개요
- Working with resource monitors — 리소스 모니터