Amazon RDS Optimized Reads로 RDS for PostgreSQL 쿼리 성능 개선
Amazon RDS Optimized Reads로 RDS for PostgreSQL의 쿼리 처리 속도를 높일 수 있습니다. RDS Optimized Reads를 사용하는 RDS for PostgreSQL DB 인스턴스 또는 다중 AZ DB 클러스터는 이를 사용하지 않는 것에 비해 쿼리 처리 속도가 최대 50% 더 빠릅니다.
주제
PostgreSQL의 RDS Optimized Reads 개요
Optimized Reads는 RDS for PostgreSQL 버전 15.2 이상, 14.7 이상, 13.10 이상에서 기본적으로 사용할 수 있습니다.
RDS Optimized Reads가 켜져 있는 RDS for PostgreSQL DB 인스턴스 또는 다중 AZ DB 클러스터를 사용할 경우, Solid State Drive(SSD) 블록 수준 스토리지에 기반한 Non-Volatile Memory Express(NVMe)를 사용하여 최대 50% 더 빠른 쿼리 성능을 실현할 수 있습니다. PostgreSQL에서 생성된 임시 테이블을 로컬 스토리지에 배치하면 네트워크를 통해 EBS(Elastic Block Storage)로 향하는 트래픽을 줄여 쿼리 처리 속도를 높일 수 있습니다.
PostgreSQL에서 임시 객체는 세션 종료 시 자동으로 삭제되는 임시 네임스페이스에 할당됩니다. 삭제하는 동안 임시 네임스페이스는 테이블, 함수, 연산자 또는 확장 같은 스키마로 한정된 개체를 포함하여 세션에 종속된 모든 객체를 제거합니다.
RDS for PostgreSQL에서는 임시 객체가 저장되는 이 임시 작업 영역에 대해temp_tablespaces
파라미터가 구성됩니다.
다음 쿼리는 테이블스페이스의 이름과 위치를 반환합니다.
postgres=> show temp_tablespaces;
temp_tablespaces --------------------- rds_temp_tablespace (1 row)
rds_temp_tablespace
는 NVMe 로컬 스토리지를 가리키는 RDS에서 구성한 테이블스페이스입니다. AWS Management Console을 사용하여 rds_temp_tablespace
이외의 테이블스페이스를 가리키도록 Parameter group
에 있는 이 파라미터를 수정하면 Amazon EBS 스토리지로 언제든지 다시 전환할 수 있습니다. 자세한 내용은 DB 클러스터 파라미터 그룹에서 파라미터 수정 섹션을 참조하세요. SET 명령을 사용하여 세션 수준에서 temp_tablespaces
파라미터의 값을 pg_default
로 수정할 수도 있습니다. 파라미터를 수정하면 임시 작업 영역이 Amazon EBS로 리디렉션됩니다. Amazon EBS로 다시 전환하면 RDS 인스턴스 또는 클러스터의 로컬 스토리지가 특정 SQL 작업을 수행하기에 충분한 용량이 아닐 때 도움이 됩니다.
postgres=> SET temp_tablespaces TO 'pg_default';
SET
postgres=> show temp_tablespaces;
temp_tablespaces ------------------ pg_default
RDS Optimized Reads 사용 사례
다음은 Optimized Reads가 도움이 될 수 있는 몇 가지 사용 사례입니다.
-
CTE(Common Table Expression), 파생된 테이블, 그룹화 작업을 포함하는 분석 쿼리.
-
애플리케이션의 최적화되지 않은 쿼리를 처리하는 읽기 전용 복제본.
-
항상 적절한 인덱스를 사용할 수 없는 GROUP BY 및 ORDER BY 같은 복잡한 작업이 포함된 온디맨드 또는 동적 보고 쿼리.
-
내부 임시 테이블을 사용하는 기타 워크로드.
-
정렬을 위한
CREATE INDEX
또는REINDEX
작업입니다.
RDS Optimized Reads 모범 사례
RDS Optimized Reads에 대한 다음 모범 사례를 따릅니다.
-
실행 중 인스턴스 스토어가 가득 차서 쿼리가 실패하는 경우에 대비하여 읽기 전용 쿼리의 재시도 로직을 추가합니다.
-
CloudWatch 지표
FreeLocalStorage
를 사용하여 인스턴스 스토어에서 사용 가능한 스토리지 공간을 모니터링합니다. DB 인스턴스 또는 다중 AZ DB 클러스터의 워크로드로 인해 인스턴스 스토어가 한도에 도달하면 더 큰 DB 인스턴스 클래스를 사용하도록 수정하세요.
RDS Optimized Reads 사용
단일 AZ DB 인스턴스 배포, 다중 AZ DB 인스턴스 배포 또는 다중 AZ DB 클러스터 배포에서 NVMe 기반 DB 인스턴스 클래스 중 하나를 사용하여 RDS for PostgreSQL DB 인스턴스를 프로비저닝하면 DB 인스턴스는 자동으로 RDS Optimized Reads를 사용합니다.
다중 AZ 배포에 대한 자세한 정보는 Amazon RDS에 대한 다중 AZ 배포 구성 및 관리 섹션을 참조하세요.
RDS Optimized Read를 켜려면 다음 중 하나를 수행합니다.
-
NVMe 기반 DB 인스턴스 클래스 중 하나를 사용하여 RDS for PostgreSQL DB 인스턴스 또는 다중 AZ DB 클러스터를 생성합니다. 자세한 내용은 Amazon RDS DB 인스턴스 생성 단원을 참조하십시오.
-
NVMe 기반 DB 인스턴스 클래스 중 하나를 사용하여 기존 RDS for PostgreSQL DB 인스턴스 또는 다중 AZ DB 클러스터를 수정합니다. 자세한 내용은 Amazon RDS DB 인스턴스 수정 단원을 참조하십시오.
RDS Optimized Reads는 로컬 NVMe SSD 스토리지가 있는 DB 인스턴스 클래스 중 하나 이상이 지원되는 모든 AWS 리전에서 사용 가능합니다. 자세한 내용은 DB 인스턴스 클래스 단원을 참조하십시오.
최적화되지 않은 읽기 RDS 인스턴스로 다시 전환하려면 RDS 인스턴스 또는 클러스터의 DB 인스턴스 클래스를 데이터베이스 워크로드에 대해 EBS 스토리지만 지원하는 유사한 인스턴스 클래스로 수정하세요. 예를 들어, 현재 DB 인스턴스 클래스가 db.r6gd.4xlarge인 경우 db.r6g.4xlarge를 선택하여 다시 전환합니다. 자세한 내용은 Amazon RDS DB 인스턴스 수정을 참조하세요.
RDS Optimized Reads를 사용하는 DB 인스턴스 모니터링
다음 CloudWatch 지표를 사용하여 RDS Optimized Reads를 사용하는 DB 인스턴스를 모니터링할 수 있습니다.
-
FreeLocalStorage
-
ReadIOPSLocalStorage
-
ReadLatencyLocalStorage
-
ReadThroughputLocalStorage
-
WriteIOPSLocalStorage
-
WriteLatencyLocalStorage
-
WriteThroughputLocalStorage
이러한 지표는 사용 가능한 인스턴스 스토어 스토리지, IOPS 및 처리량(throughput)에 대한 데이터를 제공합니다. 이러한 지표에 대한 자세한 내용은 Amazon RDS에 대한 Amazon CloudWatch 지표 섹션을 참조하세요.
로컬 스토리지의 현재 사용량을 모니터링하려면 다음 쿼리를 사용하여 데이터베이스에 로그인합니다.
SELECT spcname AS "Name", pg_catalog.pg_size_pretty(pg_catalog.pg_tablespace_size(oid)) AS "size" FROM pg_catalog.pg_tablespace WHERE spcname IN ('rds_temp_tablespace');
임시 파일 및 사용량에 대한 자세한 내용은 PostgreSQL을 사용한 임시 파일 관리를 참조하세요.
PostgreSQL의 RDS Optimized Reads 제한 사항
PostgreSQL의 RDS Optimized Reads에는 다음과 같은 제한 사항이 적용됩니다.
-
인스턴스 스토어가 가득 차면 트랜잭션이 실패할 수 있습니다.