Amazon Redshift Spectrum 쿼리 요금을 계산하려면 어떻게 해야 합니까?
Amazon Redshift Spectrum을 사용하여 Amazon Simple Storage Service(Amazon S3) 데이터를 쿼리할 때 비용을 계산하고 최적화하려고 합니다.
간략한 설명
전제 조건:
- 동일한 AWS 리전에 있는 Amazon Redshift 클러스터와 S3 버킷.
- 클러스터에 연결되어 SQL 명령을 실행하는 SQL 클라이언트.
Redshift Spectrum이 Amazon S3에서 스캔한 바이트 수에 따라 요금이 부과됩니다. 리전에 따라 추가 요금이 발생할 수 있습니다. Redshift Spectrum은 바이트 수를 다음 메가바이트로 반올림하며, 쿼리당 최소 10MB를 적용합니다. 자세한 내용은 Amazon Redshift 요금을 참조하십시오.
참고: Redshift Spectrum은 파티션과 실패한 쿼리를 관리하는 DDL(Data Definition Language, 데이터 정의어) 문, CREATE, ALTER 및 DROP TABLE에 대해서는 비용을 청구하지 않습니다. Amazon Redshift Serverless 컴퓨팅 용량 요금에는 모든 Amazon S3 외부 데이터 쿼리가 포함됩니다.
해결 방법
예상 쿼리 비용을 계산하고 Redshift Spectrum에서 실행하는 모든 S3 쿼리의 요약을 보려면 SVL_S3QUERY_SUMMARY 테이블을 사용하십시오. s3\ _scanned\ _bytes 열은 Redshift Spectrum이 S3에서 스캔하여 Redshift Spectrum 계층으로 보내는 바이트 수를 반환합니다.
사용
SVL_S3QUERY_SUMMARY에 대해 다음 쿼리를 실행하여 Amazon S3가 queryID별로 전송하는 바이트 수를 확인합니다.
SELECT s3_scanned_bytes FROM SVL_S3QUERY_SUMMARY WHERE query=queryID;
참고: queryID를 내 쿼리 ID로 변경합니다.
S3에서 스캔한 모든 바이트 수의 합계를 확인하려면 다음 쿼리를 실행합니다.
SELECT sum(s3_scanned_bytes) FROM SVL_S3QUERY_SUMMARY;
또한 특정 시간 간격으로 실행하는 모든 Redshift Spectrum 쿼리의 바이트 수 합계를 확인할 수 있습니다. 다음 예에서는 전날에 실행하기 시작한 쿼리의 총 바이트 수를 계산하는 방법을 보여줍니다.
SELECT sum(s3_scanned_bytes) FROM SVL_S3QUERY_SUMMARY WHERE starttime >= current_date-1;
미국 동부(버지니아 북부) 리전의 S3 버킷에 대해 다음 쿼리를 실행하는 경우 Redshift Spectrum은 테라바이트당 요금을 청구합니다. s3_scanned_bytes의 합계가 SVL_S3QUERY_SUMMARY를 쿼리할 때 621,900,000,000바이트를 반환하는 경우 바이트에서 테라바이트로 변환하면 0.565614755032584테라바이트가 됩니다.
쿼리 예제:
621900000000 bytes = 621900000000/1024 = 607324218.75 kilobytes 607324218.75 kilobytes = 607324218.75/1024 = 593090.057373046875 megabytes 593090.057373046875 megabytes = 593090.057373046875 /1024 = 579.189509153366089 gigabytes 579.189509153366089 gigabytes = 579.189509153366089/1024 = 0.565614755032584 terabytes
다음 예제에서 사용량은 약 0.5657테라바이트입니다. Redshift Spectrum 사용 비용을 계산하려면 테라바이트당 비용을 곱하십시오.
$5 * 0.5657= $2.83
다음 SQL 쿼리를 실행하여 Redshift Spectrum 사용 요금을 계산하십시오.
SELECT round(1.0*sum(s3_scanned_bytes/1024/1024/1024/1024),4) s3_scanned_tb, round(1.0*5*sum(s3_scanned_bytes/1024/1024/1024/1024),2) cost_in_usd FROM SVL_S3QUERY_SUMMARY;
이전 예제에서는 쿼리가 전날에 스캔한 데이터의 S3 버킷에 대한 Redshift Spectrum의 요금을 쿼리합니다.
참고: 최대 9.9MB까지 스캔하는 모든 쿼리는 반올림되어 10MB에 대한 요금이 청구됩니다. 실패하거나 중단된 쿼리에 대해서는 요금이 부과되지 않습니다.
또한 STL(System Log Table, 시스템 로그 테이블)은 로그 사용량과 사용 가능한 디스크 공간에 따라 2~5일의 로그 기록만 보관합니다. 전송된 바이트를 기록하려면 일일 쿼리 요금을 계산하고 데이터를 다른 테이블에 저장하는 것이 좋습니다.
쿼리 예제:
CREATE VIEW spectrum_cost AS SELECT starttime::date as date, xid, query, trim(usename) as user, CASE WHEN s3_scanned_bytes < 10000000 then 10 ELSE s3_scanned_bytes/1024/1024 end as scanned_mb, round(CASE WHEN s3_scanned_bytes < 10000000 then 10*(5.0/1024/1024) ELSE (s3_scanned_bytes/1024/1024)*(5.0/1024/1024) end,5) as cost_$ FROM svl_s3query_summary s LEFT JOIN pg_user u ON userid=u.usesysid JOIN (select xid as x_xid,max(aborted) as x_aborted from svl_qlog group by xid) q ON s.xid=q.x_xid WHERE userid>1 AND x_aborted=0 AND s.starttime >= current_date-1;
참고: CREATE TABLE 쿼리를 사용하여 데이터를 계산하고 다른 테이블에 저장할 수도 있습니다. 기간을 지정하지 않으려면 current_date-1을 제거하십시오.
쿼리가 전날 S3에서 Redshift Spectrum으로 스캔한 데이터의 총 합계를 계산합니다. 총 예상 요금을 계산하려면 다음 쿼리를 실행합니다.
SELECT current_date-1 as query_since, SUM(scanned_mb) as total_scanned_mb, SUM(cost_$) as total_cost_$ FROM spectrum_cost; Result: query_since | total_scanned_mb | total_cost_$ --------------+------------------+--------------- 2020-05-15 | 5029 | 0.02515
Redshift Spectrum 모범 사례
쿼리 요금을 줄이고 Redshift Spectrum의 성능을 개선하려면 다음 모범 사례를 사용하십시오.
- Redshift Spectrum에 대한 비용 제어 및 동시성 규모 조정 특성을 사용하여 사용량을 모니터링하고 제어합니다.
- 최적화된 데이터 형식을 사용하여 성능을 개선하고 비용을 절감합니다. PARQUET 및 ORC와 같은 컬럼형 데이터 형식을 사용하여 Amazon S3에서 스캔하려는 열만 선택합니다.
- 데이터에 자주 액세스하지 않는 경우 Amazon S3에 데이터를 로드하고 Redshift Spectrum을 사용합니다.
- 여러 Amazon Redshift 클러스터를 사용하여 동시성의 규모를 조정할 때는 작업이 완료되는 즉시 클러스터를 중지합니다.
Redshift Spectrum에 대한 비용 제어 및 동시성 규모 조정
Redshift Spectrum에 대해 비용 제어 및 동시성 규모 조정 특성을 사용하면 일별, 주별 및 월별 사용량 할당량을 생성할 수 있습니다. 사용량 할당량에 도달하면 Amazon Redshift가 자동으로 조치를 취합니다.
비용 제어를 구성하려면 다음 단계를 완료하십시오.
- Amazon Redshift 콘솔을 엽니다.
- Configure usage limit(사용량 한도 구성)을 선택합니다.
- 다음 구성 설정을 업데이트합니다.
기간
사용량 한도
작업
참고: 작업 설정은 사용량 할당량을 관리하는 데 도움이 될 수 있습니다.
동시성 규모 조정 사용량 할당량을 구성하려면 다음 단계를 완료하십시오.
- Amazon Redshift 콘솔을 엽니다.
- Concurrency scaling usage limit(동시성 규모 조정 사용량 한도)을 사용량 할당량으로 선택합니다.
- 다음 구성 설정을 업데이트합니다.
기간
사용량 한도
작업
참고: 기간은 UTC 시간대를 기준으로 합니다. 작업 설정의 경우 Amazon Simple Notification Service(Amazon SNS) 구독을 경고 및 비활성화 특성에 연결할 수도 있습니다. Amazon Redshift 콘솔을 사용하여 경고를 활성화하면 지표에 대해 Amazon CloudWatch 경보가 자동으로 생성됩니다.
추가 비용 제어 요구 사항 및 제한
Redshift Spectrum 사용량 및 비용을 관리하려면 다음 요구 사항 및 제한 사항을 검토하십시오.
- 사용량 할당량은 지원되는 버전 1.0.14677 이상에서 사용할 수 있습니다.
- 각 카테고리에 최대 4개의 할당량 및 작업을 추가할 수 있으며 총 할당량은 8개입니다.
- Redshift Spectrum 및 동시성 규모 조정을 사용할 수 있는 리전만 Redshift Spectrum을 지원합니다.
- 각 특성에 대해 하나의 할당량만 비활성화 특성을 사용할 수 있습니다.
- 사용량 할당량은 사용량 할당량 정의 또는 클러스터를 삭제할 때까지 유지됩니다.
- 기간 중간에 할당량을 생성하면 해당 기간의 중간 지점부터 종료 시점까지 할당량이 측정됩니다.
- 로그 옵션을 선택한 경우 STL_USAGE_CONTROL 로그의 세부 정보를 검토하십시오.