Amazon Redshift Spectrum에서 쿼리 요금을 계산하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 8월 7일

Amazon Simple Storage Service(Amazon S3)에서 데이터를 스캔할 때 Amazon Redshift Spectrum의 쿼리 요금을 계산하려고 합니다. Redshift Spectrum 쿼리 사용량이나 비용을 계산하려면 어떻게 해야 하며, 요금을 줄이기 위한 모범 사례는 무엇입니까?

간략한 설명

사전 조건:

  • Amazon Redshift 클러스터.
  • SQL 명령을 실행하기 위해 클러스터에 연결된 SQL 클라이언트.
  • Amazon Redshift 클러스터와 Amazon S3 버킷 모두 동일한 리전에 있어야 합니다.

Redshift Spectrum을 사용하면 S3의 데이터에 대해 직접 SQL 쿼리를 실행할 수 있습니다. S3에서 스캔한 바이트 수에 대해 요금이 부과됩니다. 리전에 따라 추가 요금(스캔한 데이터 TB당 5 USD ~ 6.25 USD)이 발생할 수 있습니다. 바이트 숫자는 항상 다음 메가바이트로 반올림되며 쿼리당 최소 10MB입니다. 자세한 내용은 Amazon Redshift 요금을 참조하십시오.

참고: 파티션 및 실패한 쿼리를 관리하기 위한 CREATE, ALTER 또는 DROP TABLE 문과 같은 DDL(데이터 정의 언어) 문에는 요금이 부과되지 않습니다.

해결 방법

예상 쿼리 비용을 계산하고 Redshift Spectrum에서 실행된 모든 S3 쿼리의 요약을 확인하려면 SVL_S3QUERY_SUMMARY 테이블을 사용합니다. s3_scanned_bytes 열은 S3에서 스캔되어 Redshift Spectrum 계층으로 전송된 바이트 수를 반환합니다.

사용량

SVL_S3QUERY_SUMMARY에 대해 쿼리를 실행하여 각 쿼리 ID의 전송 바이트 수를 확인할 수 있습니다.

SELECT s3_scanned_bytes
FROM SVL_S3QUERY_SUMMARY
WHERE query=<queryID>;

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의 테라바이트당 요금은 5 USD입니다. SVL_S3QUERY_SUMMARY 쿼리 시 s3_scanned_bytes 합계에서 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(시스템 로그 테이블)에는 로그 사용량과 사용 가능한 디스크 공간에 따라 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와 같은 열 기반 데이터 형식을 사용하여 S3에서 스캔하려는 열만 선택합니다.
  • S3에 데이터를 로드하고 데이터에 자주 액세스하지 않는 경우 Redshift Spectrum을 사용합니다.
  • 여러 Amazon Redshift 클러스터를 사용하여 동시성을 조정하는 경우 작업이 완료되는 즉시 해당 클러스터를 종료합니다.

Redshift Spectrum의 비용 제어 및 동시성 조정

Redshift Spectrum에 대한 비용 제어 및 동시성 조정 기능을 사용하여 일별, 주별 및 월별 사용 한도를 생성할 수 있습니다. 사용 한도에 도달하면 Amazon Redshift가 자동으로 사용 한도에 따라 조치를 취합니다.

Amazon Redshift 콘솔에서 비용 관리를 구성하려면 다음 단계를 수행합니다.

1.    AWS Management Console에 로그인합니다.

2.    Amazon Redshift 콘솔을 엽니다.

참고: AWS 명령줄 인터페이스(AWS CLI) 또는 Amazon Redshift API 작업에서 사용 한도를 정의하고 관리할 수도 있습니다.

3.    사용 한도 구성(Configure usage limit)을 선택합니다.

4.    다음 구성 설정을 업데이트합니다.

기간(일별/주별/월별)

사용 한도(TB)

작업(시스템 테이블에 대한 알림/로그/비활성화 기능)

참고: 작업(Action) 기능은 사용 한도를 관리하는 데 도움이 될 수 있습니다.

동시성 조정 사용 한도를 구성하려면 다음 단계를 수행합니다.

1.    AWS Management Console에 로그인합니다.

2.    Amazon Redshift 콘솔을 엽니다.

3.    동시성 조정 사용 한도(Concurrency scaling usage limit)를 사용 한도로 선택합니다.

4.    다음 구성 설정을 업데이트합니다.

기간(일별/주별/월별)

사용 한도(hh:mm)

작업(시스템 테이블에 대한 알림/로그/비활성화 기능)

참고: 기간(Time period)은 UTC 시간대를 사용합니다. 알림(Alert)비활성화(Disable) 기능의 경우 Amazon Simple Notification Service(SNS) 구독을 경보에 연결할 수도 있습니다. 또한 Amazon Redshift 콘솔을 사용하여 알림을 활성화하면 해당 지표에 대한 Amazon CloudWatch 경보가 자동으로 생성됩니다.

추가 비용 관리 요구 사항 및 제한 사항

Redshift Spectrum 사용량 및 비용을 관리할 때는 다음 요구 사항 및 제한 사항에 유의하십시오.

  • 사용 한도는 지원되는 버전 1.0.14677 이상에서 사용할 수 있습니다.
  • 범주당 최대 4개의 제한 및 작업을 추가할 수 있습니다(총 8개의 제한).
  • Redshift Spectrum은 Redshift Spectrum 및 동시성 조정을 사용할 수 있는 리전에서만 지원됩니다.
  • 기능당 하나의 제한에만 비활성화 작업을 사용할 수 있습니다.
  • 사용 한도는 사용 한도 정의 자체 또는 클러스터가 삭제될 때까지 유지됩니다.
  • 기간 중간에 제한을 생성하면 해당 시점부터 정의된 기간이 끝날 때까지 제한이 측정됩니다.
  • 로그 옵션을 선택하는 경우 STL_USAGE_CONTROL 로그의 세부 정보를 검토하십시오.