Amazon Web Services 한국 블로그

Amazon RDS 최적화된 읽기 및 쓰기 기능 출시

저는 2009년에 Amazon RDS 소개: Amazon 관계형 데이터베이스 서비스라는 글을 썼으며, 이 글에서 다음과 같이 말했습니다.

RDS를 통해 클라우드에서 관계형 데이터베이스를 손쉽게 설정, 운영 및 확장할 수 있습니다. 인프라 프로비저닝, 소프트웨어 유지 관리 또는 일반적인 데이터베이스 관리 작업에 대한 걱정 없이 데이터베이스에 직접 액세스할 수 있습니다.

RDS를 출시한 이후 이러한 걱정을 모두 피할 수 있도록 최선을 다하면서 RDS를 훨씬 더 비용 효율적으로 만들었습니다. 예를 들어, 최근에 가격 대비 성능이 최대 52% 향상된 Graviton2 DB 인스턴스와 2배 빠른 트랜잭션 커밋 지연 시간과 함께 가격 대비 성능이 최대 33% 향상된 새로운 다중 AZ 배포 옵션을 출시했습니다.

오늘은 Amazon RDS for MySQL 워크로드를 가속화하는 새로운 두 가지 기능에 대해 말하고자 합니다.

Amazon RDS Optimized Reads는 MySQL에서 생성한 임시 테이블을 호스트 서버에 물리적으로 연결된 NVMe 기반 SSD 블록 스토리지에 배치하여 쿼리 처리 속도를 높입니다. 정렬, 해시 집계, 고부하 조인, Common Table Expressions(CTE)와 같은 임시 테이블을 사용하는 쿼리는 Optimized Reads를 사용하면 최대 50% 더 빠르게 실행할 수 있습니다.

Amazon RDS Optimized Write는 추가 비용 없이 동일한 수준의 프로비저닝된 IOPS로 쓰기 트랜잭션 처리량(throughput)을 최대 2배까지 개선합니다. Optimized Writes는 동시 트랜잭션을 많이 생성하는 쓰기 중심의 워크로드에 매우 적합합니다. 여기에는 디지털 결제, 금융 거래 플랫폼 및 온라인 게임이 포함됩니다.

Amazon RDS Optimized Reads
Optimized Reads가 없는 Amazon RDS for MySQL은 Amazon Elastic Block Store(Amazon EBS) 볼륨에 임시 테이블을 배치합니다. Optimized Reads는 임시 객체에 대한 작업을 EBS에서 r5d, m5d, r6gdm6gd 인스턴스에 연결된 인스턴스 스토어로 오프로드합니다. 이에 따라 영구 데이터에 대한 읽기 및 쓰기는 물론 플러시, 인서트 버퍼 병합 등과 같은 백그라운드 작업에 EBS 볼륨을 보다 효율적으로 활용할 수 있습니다. 이렇게 향상된 효율성은 (물론) 항상 유용하지만, 특정 사용 사례에서는 특히 더 유용합니다.

  • Complex Table Expressions, 파생된 테이블 및 그룹화 작업을 포함하는 분석 쿼리.
  • 애플리케이션의 최적화되지 않은 쿼리를 처리하는 읽기 전용 복제본.
  • 항상 적절한 색인을 사용할 수는 없는 GROUP BYORDER BY와 같은 복잡한 작업이 포함된 온디맨드 또는 동적 리포팅 쿼리.
  • 내부 임시 테이블을 사용하는 기타 워크로드.

MySQL 상태 변수 created_tmp_files를 모니터링하여 임시 테이블의 생성 속도를 관찰할 수 있습니다.

인스턴스에서 사용할 수 있는 인스턴스 스토리지의 양은 인스턴스 패밀리와 크기에 따라 다릅니다. 다음은 가이드입니다.

인스턴스 패밀리 최소 스토리지
최대 스토리지
m5d 75GB 3.6TB
m6gd 237GB 3.8TB
r5d 75GB 3.6TB
r6gd 59GB 3.8TB

Optimized Reads 사용
이 새로운 기능을 활용하려면 MySQL 엔진 버전 8.0.28 이상을 선택하고 위에 나열된 인스턴스 유형 중 하나에서 Amazon RDS for MySQL을 시작하세요.

FreeLocalStorage, ReadIOPSLocalStorage, WriteIOPSLocalStorage 등을 비롯한 새로운 CloudWatch 지표를 관찰하여 인스턴스 스토리지 사용을 모니터링할 수 있습니다(신규 및 기존 지표의 전체 목록은 사용 설명서 참조).

Optimized Reads는 적합한 데이터베이스 인스턴스 유형을 사용할 수 있는 모든 AWS 리전에서 사용할 수 있습니다.

Amazon RDS Optimized Writes
기본적으로 MySQL은 메모리와 최종 온디스크 스토리지 사이의 중간 기착지 역할을 하는 온디스크 이중 쓰기 버퍼를 사용합니다. 버퍼의 각 페이지는 16KiB이지만 최종 온디스크 스토리지에 4KiB 청크 단위로 기록됩니다. 이 추가 단계는 데이터 무결성을 유지하지만, 추가 I/O 대역폭도 소모합니다. 앞서 설명한 것처럼 쓰기 중심 워크로드를 실행하는 경우 성능 및 처리량(throughput) 요구 사항을 충족하기 위해 추가 IOPS를 프로비저닝해야 할 수 있습니다.

Optimized Writes는 균일한 16KiB 데이터베이스 페이지, 파일 시스템 블록 및 운영 체제 페이지를 사용하여 스토리지에 원자적으로(all or nothing) 기록하므로 앞서 언급한 것보다 성능이 최대 2배 향상됩니다.

Optimized Writes 사용
Optimized Writes를 사용하려면 최신 버전의 MySQL 8.0이 설치된 db.r5b 또는 db.r6i 인스턴스에서 처음부터 새 DB 인스턴스를 만들어야 합니다.

이 설정은 DB 스냅샷의 형식에 영향을 미치며 다음과 같은 두 가지 중요한 결과를 초래합니다.

  1. Optimized Writes를 활성화하기 위해 최적화되지 않은 기존 스냅샷을 최적화된 새 스냅샷으로 복원할 수는 없습니다.
  2. 최적화가 활성화된 상태로 만들어진 스냅샷을 복원하면 새 인스턴스에서 Optimized Writes가 활성화됩니다.

Optimized Writes를 지원하지 않는 인스턴스 유형으로 스케일하는 경우 Amazon RDS는 인스턴스에서 MySQL의 이중 쓰기 모드를 대체 수단으로 활성화합니다. Optimized Writes를 지원하지 않는 인스턴스에서 그것을 지원하는 인스턴스로 스케일하면 Amazon RDS는 MySQL을 이중 쓰기 모드로 시작하고 복구 및 로그 재생이 완료될 때까지 기다린 다음, 이중 쓰기를 비활성화한 상태로 MySQL을 다시 시작합니다.

미국 동부(오하이오, 버지니아 북부), 미국 서부(오레곤), 아시아 태평양(싱가포르, 도쿄) 및 유럽(프랑크푸르트, 아일랜드, 파리) 리전에서 Optimized Write가 현재 출시되어 오늘 바로 이 기능을 활용할 수 있습니다!

Jeff;