Aurora 최적화된 읽기로 Aurora PostgreSQL 쿼리 성능 개선 - Amazon Aurora

Aurora 최적화된 읽기로 Aurora PostgreSQL 쿼리 성능 개선

Aurora 최적화된 읽기로 Aurora PostgreSQL의 쿼리 처리 속도를 높일 수 있습니다. Aurora 최적화된 읽기를 사용하는 Aurora PostgreSQL DB 인스턴스는 DB 인스턴스의 메모리 용량을 초과하는 대규모 데이터 세트를 보유한 애플리케이션에서 쿼리 지연 시간이 최대 8배 개선되고 비용이 최대 30% 절감됩니다.

PostgreSQL의 Aurora 최적화된 읽기 개요

Aurora 최적화된 읽기는 비휘발성 메모리 익스프레스(NVMe) 스토리지와 함께 Graviton 기반 R6gd 및 Intel 기반 R6id 인스턴스를 사용하는 DB 클러스터를 생성할 때 기본적으로 사용할 수 있습니다. 다음 PostgreSQL 버전에서 사용할 수 있습니다.

  • 16.1 이상의 모든 버전

  • 15.4 이상 버전

  • 14.9 이상 버전

Aurora 최적화된 읽기는 계층형 캐시와 임시 객체라는 두 가지 기능을 지원합니다.

최적화된 읽기가 활성화된 계층형 캐시 - 계층형 캐시를 사용하면 DB 인스턴스 캐싱 용량을 인스턴스 메모리의 최대 5배까지 확장할 수 있습니다. 이렇게 하면 트랜잭션 측면에서 가장 최근의 일관성 있는 데이터를 포함하도록 캐시가 자동으로 유지되므로 애플리케이션은 외부 결과 집합 기반 캐싱 솔루션의 데이터 흐름을 관리하는 오버헤드에서 벗어날 수 있습니다. 이전에 Aurora 스토리지에서 데이터를 가져오던 쿼리에 대해 최대 8배 더 개선된 지연 시간을 제공합니다.

Aurora에서 기본 파라미터 그룹의 shared_buffers 값은 일반적으로 사용 가능한 메모리의 약 75%로 설정됩니다. 하지만 r6gd 및 r6id 인스턴스 유형의 경우 Aurora는 최적화된 읽기 캐시에 대한 메타데이터를 호스팅하기 위해 shared_buffers 공간을 4.5% 줄입니다.

최적화된 읽기가 활성화된 임시 객체 - 임시 객체를 사용하면 PostgreSQL에서 생성된 임시 파일을 로컬 NVMe 스토리지에 배치하여 보다 빠르게 쿼리를 처리할 수 있습니다. 이렇게 하면 네트워크를 통해 Elastic Block Storage(EBS)로 전송되는 트래픽이 줄어듭니다. DB 인스턴스에서 사용할 수 있는 메모리 용량을 초과하는 대량의 데이터를 정렬, 조인 또는 병합하는 고급 쿼리에 대해 최대 2배 더 개선된 지연 시간과 처리량을 제공합니다.

Aurora I/O 최적화 클러스터에서 최적화된 읽기는 계층형 캐시와 NVMe 스토리지의 임시 객체를 모두 사용합니다. 최적화된 읽기가 활성화된 계층형 캐시 기능을 통해 Aurora는 인스턴스 메모리의 2배를 임시 객체에 할당하고, 스토리지의 약 10%는 내부 작업으로, 나머지 스토리지는 계층형 캐시로 할당합니다. Aurora Standard 클러스터에서 최적화된 읽기는 임시 객체만 사용합니다.

Engine 클러스터 스토리지 구성 최적화된 읽기가 활성화된 임시 객체 최적화된 읽기가 활성화된 계층형 캐시 지원되는 버전
Aurora PostgreSQL 호환 버전 표준 아니요 Aurora PostgreSQL 버전 16.1 이상의 모든 버전, 15.4 이상, 버전 14.9 이상
I/O 최적화
참고

NVMe 기반 DB 인스턴스 클래스에서 IO 최적화 클러스터와 Standard 클러스터 사이를 전환하면 데이터베이스 엔진이 즉시 재시작됩니다.

Aurora PostgreSQL에서는 임시 객체가 저장되는 테이블 공간을 구성하는 데 temp_tablespaces 파라미터를 사용합니다.

임시 객체가 구성되었는지 확인하려면 다음 명령을 사용합니다.

postgres=> show temp_tablespaces; temp_tablespaces --------------------- aurora_temp_tablespace (1 row)

aurora_temp_tablespace는 NVMe 로컬 스토리지를 가리키는 Aurora에서 구성한 테이블스페이스입니다. 이 파라미터는 수정하거나 Amazon EBS 스토리지로 다시 전환할 수 없습니다.

최적화된 읽기 캐시가 켜져 있는지 확인하려면 다음 명령을 사용합니다.

postgres=> show shared_preload_libraries; shared_preload_libraries -------------------------------------------------------- rdsutils,pg_stat_statements,aurora_optimized_reads_cache

Aurora 최적화된 읽기 사용

NVMe 기반 DB 인스턴스 중 하나를 사용하여 Aurora PostgreSQL DB 인스턴스를 프로비저닝하면 DB 인스턴스는 자동으로 Aurora 최적화된 읽기를 사용합니다.

Aurora Optimized Read를 켜려면 다음 중 하나를 수행합니다.

  • NVMe 기반 DB 인스턴스 클래스 중 하나를 사용하여 Aurora PostgreSQL DB 클러스터를 생성합니다. 자세한 내용은 Amazon Aurora DB 클러스터 생성 단원을 참조하십시오.

  • NVMe 기반 DB 인스턴스 클래스 중 하나를 사용하여 기존 Aurora PostgreSQL DB 클러스터를 수정합니다. 자세한 내용은 Amazon Aurora DB 클러스터 수정 단원을 참조하십시오.

Aurora 최적화된 읽기는 로컬 NVMe SSD 스토리지가 있는 DB 인스턴스 클래스 중 하나 이상이 지원되는 모든 AWS 리전에서 사용 가능합니다. 자세한 내용은 Amazon Aurora DB 인스턴스 클래스 단원을 참조하십시오.

최적화되지 않은 읽기 Aurora 인스턴스로 다시 전환하려면 Aurora 인스턴스의 DB 인스턴스 클래스를 데이터베이스 워크로드에 대해 NVMe 임시 스토리지가 없는 유사한 인스턴스 클래스로 수정하세요. 예를 들어, 현재 DB 인스턴스 클래스가 db.r6gd.4xlarge인 경우 db.r6g.4xlarge를 선택하여 다시 전환합니다. 자세한 내용은 Aurora DB 인스턴스 수정을 참조하세요.

Aurora 최적화된 읽기 사용 사례

최적화된 읽기가 활성화된 계층형 캐시

계층형 캐시가 있는 최적화된 읽기가 도움이 될 수 있는 몇 가지 사용 사례입니다.

  • 엄격한 성능 SLA가 있는 결제 처리, 청구, 전자 상거래와 같은 인터넷 규모의 애플리케이션

  • 지표/데이터 수집을 위해 수백 개의 포인트 쿼리를 실행하는 실시간 보고 대시보드

  • 수백 개의 벡터 임베딩에서 정확한 이웃 또는 가장 가까운 이웃을 검색하기 위해 pgvector 확장을 갖춘 생성형 AI 애플리케이션

최적화된 읽기가 활성화된 임시 객체

다음은 임시 객체가 있는 최적화된 읽기가 도움이 될 수 있는 몇 가지 사용 사례입니다.

  • CTE(Common Table Expression), 파생된 테이블, 그룹화 작업을 포함하는 분석 쿼리.

  • 애플리케이션의 최적화되지 않은 쿼리를 처리하는 읽기 전용 복제본.

  • 항상 적절한 인덱스를 사용할 수 없는 GROUP BY 및 ORDER BY 같은 복잡한 작업이 포함된 온디맨드 또는 동적 보고 쿼리.

  • 정렬을 위한 CREATE INDEX 또는 REINDEX 작업입니다.

  • 내부 임시 테이블을 사용하는 기타 워크로드.

Aurora 최적화된 읽기를 사용하는 DB 인스턴스 모니터링

최적화된 읽기가 활성화된 계층형 캐시를 사용하는 쿼리는 다음 예와 같이 EXPLAIN 명령을 사용하여 모니터링할 수 있습니다.

Postgres=> EXPLAIN (ANALYZE, BUFFERS) SELECT c FROM sbtest15 WHERE id=100000000 QUERY PLAN -------------------------------------------------------------------------------------- Index Scan using sbtest15_pkey on sbtest15 (cost=0.57..8.59 rows=1 width=121) (actual time=0.287..0.288 rows=1 loops=1) Index Cond: (id = 100000000) Buffers: shared hit=3 read=2 aurora_orcache_hit=2 I/O Timings: shared/local read=0.264 Planning: Buffers: shared hit=33 read=6 aurora_orcache_hit=6 I/O Timings: shared/local read=0.607 Planning Time: 0.929 ms Execution Time: 0.303 ms (9 rows) Time: 2.028 ms
참고

계획 설명의 Buffers 섹션에 있는 aurora_orcache_hitaurora_storage_read 필드는 최적화된 읽기가 켜져 있고 값이 0보다 큰 경우에만 표시됩니다. 읽기 필드는 aurora_orcache_hit 필드와 aurora_storage_read 필드의 합계입니다.

다음 CloudWatch 지표를 사용하여 Aurora 최적화된 읽기를 사용하는 DB 인스턴스를 모니터링할 수 있습니다.

  • AuroraOptimizedReadsCacheHitRatio

  • FreeEphemeralStorage

  • ReadIOPSEphemeralStorage

  • ReadLatencyEphemeralStorage

  • ReadThroughputEphemeralStorage

  • WriteIOPSEphemeralStorage

  • WriteLatencyEphemeralStorage

  • WriteThroughputEphemeralStorage

이러한 지표는 사용 가능한 인스턴스 스토어 스토리지, IOPS 및 처리량(throughput)에 대한 데이터를 제공합니다. 이러한 지표에 대한 자세한 내용은 Amazon Aurora에 대한 인스턴스 수준 지표 섹션을 참조하세요.

pg_proctab 확장을 사용하여 NVMe 스토리지를 모니터링할 수도 있습니다.

postgres=>select * from pg_diskusage(); major | minor | devname | reads_completed | reads_merged | sectors_read | readtime | writes_completed | writes_merged | sectors_written | writetime | current_io | iotime | totaliotime ------+-------+---------------------+-----------------+--------------+--------------+----------+------------------+---------------+-----------------+-----------+------------+---------+------------- | | rdstemp | 23264 | 0 | 191450 | 11670 | 1750892 | 0 | 24540576 | 819350 | 0 | 3847580 | 831020 | | rdsephemeralstorage | 23271 | 0 | 193098 | 2620 | 114961 | 0 | 13845120 | 130770 | 0 | 215010 | 133410 (2 rows)

Aurora 최적화된 읽기 모범 사례

Aurora 최적화된 읽기에 대한 다음 모범 사례를 따릅니다.

  • CloudWatch 지표 FreeEphemeralStorage를 사용하여 인스턴스 스토어에서 사용 가능한 스토리지 공간을 모니터링합니다. DB 인스턴스의 워크로드로 인해 인스턴스 스토어가 한도에 도달하면 임시 객체를 많이 사용하는 동시성 및 쿼리를 조정하거나 더 큰 DB 인스턴스 클래스를 사용하도록 수정합니다.

  • 최적화된 읽기 캐시 적중률에 대한 CloudWatch 지표를 모니터링합니다. VACUUM과 같은 작업은 많은 수의 블록을 매우 빠르게 수정합니다. 이로 인해 적중률이 일시적으로 떨어질 수 있습니다. pg_prewarm 확장을 사용하여 데이터를 버퍼 캐시에 로드하면 Aurora가 이러한 블록 중 일부를 최적화된 읽기 캐시에 선제적으로 기록할 수 있습니다.

  • 클러스터 캐시 관리(CCM)를 사용하여 장애 조치 대상으로 사용될 Tier-0 리더의 버퍼 캐시 및 계층형 캐시를 워밍업할 수 있습니다. CCM이 활성화되면 버퍼 캐시를 정기적으로 스캔하여 제거 가능한 페이지를 계층형 캐시에 기록합니다. CCM에 대한 자세한 내용은 장애 조치 후 Aurora PostgreSQL용 클러스터 캐시 관리를 통한 신속한 복구 섹션을 참조하세요.