티스토리 뷰

Amazon Redshift Serverless

AWS에 대표적인 Data Warehouse 제품인 Redshift에 Serverless 버전의 비용 관련된 내용이 잘 정리된 글이 없어서 이번 기회에 정리해 봅니다. 글을 정리하는데 백서도 도움이 됐지만 메가존 포럼과 AWS Global Center의 도움을 많이 받았습니다.

우선 Redshift Serverless 비용을 이해하려면 Redshift Processing Units(RPUs) 개념을 알아야 합니다. Redshift Serverless는 워크로드에 따라 자동으로 컴퓨팅 파워를 확장하는데 그게 RPUs 단위입니다. 가벼운 쿼리는 32 RPUs(최소 설정 값)로 처리되고 좀 더 복잡한 쿼리는 최대 512 RPUs까지 늘어납니다. 기본 값을 Base capacity라고 하는데 이 값을 32부터 8의 배수로 32, 40, 48, 56, 64, 72, 80, … 512까지 설정할 수 있는 겁니다. Base capacity는 마치 Lambda에 메모리 설정 같겠네요. 하지만 Lambda의 경우 컴퓨팅 파워를 자동으로 늘리진 못하니 Redshift Serverless와는 차이가 있겠습니다. 

Base capacity

 

자, 그러면 RPUs의 비용을 알아볼 차례입니다. 백서에 따르면 서울 리전의 경우 RPU 한 개가 시간당 0.438 USD로 책정됩니다. 최소 단위인 32 RPUs로 계산해 보면 시간당 0.438*32 = 14.016$ 가 나옵니다.

서울 리전의 RPU 시간당 요금

 

Redshift Serverless의 최소 요금은 분(minute)으로 계산됩니다. 1초 쿼리도 1분 사용한 것으로 취급되고 59초를 사용한 것도 1분 사용한 것으로 취급되어 1분에 대한 비용이 청구됩니다. 그럼 14.016$을 1분으로 계산하면 0.438*32/60 = 0.2336$ 로 생각할 수 있습니다. 아주 가벼운 SELECT 쿼리 한 개도 무조건 0.2불은 지불해야 하는 겁니다. Datagrip, DBeaver 같은 SQL Client에서 데이터 미리 보기 등만 해도 0.2불이 흘러나가는 거죠. 이건 정말 안타까운 상황이 아닐 수 없습니다. 언젠가는 초(second) 단위 요금제로 업데이트가 될까요? 

Redshift Serverless를 사용할 때 명시적인 트랜잭션은 COMMIT이나 ROLLBACK을 꼭 하라고 이야기합니다. 그 이유는 트랜잭션 단위로 비용이 청구되기 때문에 트랜잭션을 끝내지 않았다면 비용 폭탄을 맞게 되기 때문입니다. 물론 이런 상황을 Redshift Serverless에 Usage limits, Query Monitoring Rules 설정으로 어느 정도 막을 수 있지만 트랜잭션은 꼭 잘 닫도록 습관을 들이도록 합시다.

https://aws.amazon.com/ko/blogs/korea/amazon-redshift-serverless-now-generally-available-with-new-capabilities/

 

아주 짧게 끝나는 쿼리가 연속으로 실행되거나 병렬로 실행되면 어떨까요? AWS 답변에 따르면 그와 상관없이 컴퓨팅이 사용된 시간(분)을 기준으로 비용이 청구된다고 합니다. 즉, 3초면 끝나는 쿼리를 연속 3개를 실행하는 경우 1분에 해당하는 비용만 청구되는 겁니다.

비용은 아래 쿼리를 통해서 즉시 확인 가능합니다. 단, 아래 쿼리조차 비용이 청구되니 참고하셔야 합니다 ( 수 초 내에 결과가 나오는 쿼리라 Base capacity가 32 RPUs라면 2불 정도 되는 쿼리겠네요 )

SELECT * FROM sys_serverless_usage;

쿼리 결과는 아래처럼 보입니다. compute_seconds 는 실제 쿼리가 실행된 시간을 의미합니다. 그리고 charged_seconds 는 비용이 청구된 시간을 표시합니다. 1920은 32 RPUs * 60(seconds)의 값입니다. 최소 단위가 분(minute)으로 계산되기 때문에 1920이라는 수치가 나온 겁니다. 그리고 start_time end_time 을 보면 최소 간격이 1분으로 보이는데 이것 역시 비용 최소 단위가 분(minute)으로 계산되기 때문에 1분 간격으로 보이는 것입니다.

SELECT * FROM sys_serverless_usage 쿼리 결과

 

끝으로 예시 상황 몇 개를 정리해 둡니다. 누군가에게 도움이 되시길 바랍니다. ( Base capacity는 32로 가정합니다 )

쿼리 사용되는 RPUs
SELECT product_id, price FROM order -- 1초 걸리는 쿼리  32
SELECT product_id, price FROM order -- 1초 걸리는 쿼리 
(딜레이 없이 연속 실행)
SELECT sex, name FROM user -- 1초 걸리는 쿼리
32
SELECT product_id, price FROM order -- 1초 걸리는 쿼리 
(병렬 실행)
SELECT sex, name FROM user -- 1초 걸리는 쿼리
32
SELECT * FROM order -- 64초 걸리는 쿼리 64
SELECT * FROM user -- 100초 걸리는 쿼리 64

 

 


이번 글에서는 Redshift Serverless 비용에 대해 살펴봤습니다. Redshift Serverless를 사용하면서 가장 궁금했던 점이 비용이었는데요. 인터넷을 아무리 뒤져도 제가 원하는 내용이 없어서 정리해 봤습니다. 이걸 바탕으로 얼마나 가벼운/무거운 쿼리가 어떤 빈도로 날아가는지 계산해 보면 프로비전(Provisioned)된 Redshift를 사용하는 게 나을지, Redshift Serverless를 사용하는 게 나을지 견적이 나올 것 같습니다. 또한 무조건 둘 중에 하나를 선택하는 것보다는 상황에 따라 프로비전 된 Redshift와 Redshift Serverless를 섞어서 사용하는 것도 선택지에 두는 게 좋습니다. 이때는 데이터 공유(Data Share) 기능을 사용하면 같은 데이터를 여러 서비스에 실시간으로 활용할 수 있기 때문에 아주 탁월한 효과를 볼 수 있겠습니다.

댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday