Amazon RDS Optimized Reads로 RDS for MySQL 쿼리 성능 개선 - Amazon Relational Database Service

Amazon RDS Optimized Reads로 RDS for MySQL 쿼리 성능 개선

Amazon RDS Optimized Reads로 RDS for MySQL의 쿼리 처리 속도를 높일 수 있습니다. RDS Optimized Reads를 사용하는 RDS for MySQL DB 인스턴스 또는 다중 AZ DB 클러스터는 이를 사용하지 않는 DB 인스턴스 또는 클러스터에 비해 쿼리 처리 속도가 최대 2배 더 빠릅니다.

RDS Optimized Reads 개요

RDS Optimized Reads가 켜져 있는 RDS for MySQL DB 인스턴스 또는 다중 AZ DB 클러스터를 사용하면 인스턴스 스토어를 사용하여 더 빠른 쿼리 성능을 얻을 수 있습니다. 인스턴스 스토어는 DB 인스턴스 또는 다중 AZ DB 클러스터에 블록 수준의 임시 스토리지를 제공합니다. 스토리지는 호스트 서버에 물리적으로 연결된 NVMe(Non-Volatile Memory Express) 솔리드 스테이트 드라이브(SSD)에 있습니다. 이 스토리지는 짧은 지연 시간, 높은 임의 I/O 성능, 높은 순차 읽기 처리량(throughput)에 최적화되어 있습니다.

RDS Optimized Reads는 DB 인스턴스 또는 다중 AZ DB 클러스터가 db.m5d 또는 db.m6gd 같은 DB 인스턴스 클래스를 인스턴스 스토어와 함께 사용할 때 기본적으로 켜집니다. RDS Optimized Reads를 사용하면 일부 임시 객체가 인스턴스 스토어에 저장됩니다. 이러한 임시 객체에는 내부 임시 파일, 내부 온디스크 임시 테이블, 메모리 맵 파일, 이진 로그(binlog) 캐시 파일이 포함됩니다. 인스턴스 스토어 유형에 대한 자세한 내용은 Linux 인스턴스용 Amazon Elastic Compute Cloud 사용 설명서Amazon EC2 인스턴스 스토어 섹션을 참조하세요.

쿼리 처리를 위해 MySQL에서 임시 객체를 생성하는 워크로드는 인스턴스 스토어를 활용하여 쿼리를 더 빠르게 처리할 수 있습니다. 이러한 유형의 워크로드에는 정렬, 해시 집계, 고부하 조인, CTE(Common Table Expression) 및 인덱싱되지 않은 열에 대한 쿼리가 포함됩니다. 이러한 인스턴스 스토어 볼륨은 영구 Amazon EBS 스토리지에 사용되는 스토리지 구성과 관계없이 더 높은 IOPS와 성능을 제공합니다. RDS Optimized Reads는 임시 객체에 대한 작업을 인스턴스 스토어로 오프로드하므로 이제 영구 객체에 대한 작업에 영구 스토리지(Amazon EBS)의 초당 입출력 작업 처리량(IOPS) 또는 처리량(throughput)을 사용할 수 있습니다. 이러한 작업에는 일반 데이터 파일 읽기 및 쓰기와 플러싱 및 버퍼 병합 삽입과 같은 백그라운드 엔진 작업이 포함됩니다.

참고

수동 및 자동 RDS 스냅샷에는 영구 객체를 위한 엔진 파일만 포함됩니다. 인스턴스 스토어에서 생성된 임시 객체는 RDS 스냅샷에 포함되지 않습니다.

RDS Optimized Reads 사용 사례

쿼리 실행을 위해 내부 테이블이나 파일 같은 임시 객체에 크게 의존하는 워크로드가 있는 경우 RDS Optimized Reads를 켜는 것이 좋습니다. RDS Optimized Reads의 사용 사례는 다음과 같습니다.

  • 복잡한 CTE(Common Table Expression), 파생된 테이블, 그룹화 작업을 사용하여 분석 쿼리를 실행하는 애플리케이션

  • 최적화되지 않은 쿼리로 많은 읽기 트래픽을 처리하는 읽기 전용 복제본

  • GROUP BYORDER BY 절이 있는 쿼리와 같이 복잡한 작업이 필요한 온디맨드 또는 동적 보고 쿼리를 실행하는 애플리케이션

  • 쿼리 처리를 위해 내부 임시 테이블을 사용하는 워크로드

    엔진 상태 변수 created_tmp_disk_tables를 모니터링하여 DB 인스턴스에 생성된 디스크 기반 임시 테이블의 수를 확인할 수 있습니다.

  • 직접 또는 절차에 따라 대형 임시 테이블을 생성하여 중간 결과를 저장하는 애플리케이션

  • 인덱싱되지 않은 열에서 그룹화 또는 정렬 작업을 수행하는 데이터베이스 쿼리

RDS Optimized Reads 모범 사례

RDS Optimized Reads에 대한 다음 모범 사례를 따릅니다.

  • 실행 중 인스턴스 스토어가 가득 차서 쿼리가 실패하는 경우에 대비하여 읽기 전용 쿼리의 재시도 로직을 추가합니다.

  • CloudWatch 지표 FreeLocalStorage를 사용하여 인스턴스 스토어에서 사용 가능한 스토리지 공간을 모니터링합니다. DB 인스턴스의 워크로드로 인해 인스턴스 스토어가 한도에 도달하면 더 큰 DB 인스턴스 클래스를 사용하도록 DB 인스턴스를 수정하세요.

  • DB 인스턴스 또는 다중 AZ DB 클러스터의 메모리가 충분하지만 여전히 인스턴스 스토어의 스토리지 한도에 도달하면 binlog_cache_size 값을 늘려 세션별 binlog 항목을 메모리에 유지합니다. 이 구성은 binlog 항목을 디스크의 임시 binlog 캐시 파일에 쓰는 것을 방지합니다.

    binlog_cache_size 파라미터는 세션별로 다릅니다. 새 세션마다 값을 변경할 수 있습니다. 이 파라미터를 설정하면 피크 워크로드 중에 DB 인스턴스의 메모리 사용률을 높일 수 있습니다. 따라서 애플리케이션의 워크로드 패턴과 DB 인스턴스의 가용 메모리를 기반으로 파라미터 값을 높이는 것을 고려해 보세요.

  • binlog_format에 기본값 MIXED를 사용합니다. 트랜잭션 크기에 따라 binlog_formatROW로 설정하면 인스턴스 스토어에 큰 binlog 캐시 파일이 생성될 수 있습니다.

  • internal_tmp_mem_storage_engine 파라미터를 TempTable로 설정하고, temptable_max_mmap 파라미터를 인스턴스 스토어의 사용 가능한 스토리지 크기에 맞게 설정합니다.

  • 단일 트랜잭션에서 대량 변경을 수행하지 마세요. 이러한 유형의 트랜잭션은 인스턴스 스토어에 대용량 binlog 캐시 파일을 생성할 수 있으며, 인스턴스 스토어가 가득 차면 문제가 발생할 수 있습니다. binlog 캐시 파일의 스토리지 사용을 최소화하려면 쓰기를 여러 개의 작은 트랜잭션으로 분할하는 것이 좋습니다.

  • ABORT_SERVER 파라미터에 기본값 binlog_error_action를 사용합니다. 이렇게 하면 백업이 활성화된 DB 인스턴스에서 이진 로깅 문제를 방지할 수 있습니다.

RDS Optimized Reads 사용

단일 AZ DB 인스턴스 배포, 다중 AZ DB 인스턴스 배포 또는 다중 AZ DB 클러스터 배포에서 다음 DB 인스턴스 클래스 중 하나를 사용하여 RDS for MySQL DB 인스턴스를 프로비저닝하면 DB 인스턴스는 자동으로 RDS Optimized Reads를 사용합니다.

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

  • 이러한 DB 인스턴스 클래스 중 하나를 사용하여 RDS for MySQL DB 인스턴스 또는 다중 AZ DB 클러스터를 생성합니다. 자세한 내용은 Amazon RDS DB 인스턴스 생성 섹션을 참조하세요.

  • 이러한 DB 인스턴스 클래스 중 하나를 사용하여 기존 RDS for MySQL DB 인스턴스 또는 다중 AZ DB 클러스터를 수정합니다. 자세한 내용은 Amazon RDS DB 인스턴스 수정 섹션을 참조하세요.

RDS Optimized Reads는 로컬 NVMe SSD 스토리지가 있는 DB 인스턴스 클래스 중 하나 이상이 지원되는 모든 AWS 리전 RDS에서 사용 가능합니다. DB 인스턴스 클래스에 대한 자세한 내용은 DB 인스턴스 클래스 섹션을 참조하세요.

DB 인스턴스 클래스 가용성은 AWS 리전에 따라 다릅니다. 특정 AWS 리전 클래스에서 DB 인스턴스 클래스가 지원되는지 여부를 확인하려면 AWS 리전에서 DB 인스턴스 클래스 지원 확인를 참조하세요.

RDS Optimized Reads를 사용하지 않으려면 기능을 지원하는 DB 인스턴스 클래스를 사용하지 않도록 DB 인스턴스 또는 다중 AZ DB 클러스터를 수정하세요.

RDS Optimized Reads를 사용하는 DB 인스턴스 모니터링

다음 CloudWatch 지표를 사용하여 RDS Optimized Reads를 사용하는 DB 인스턴스를 모니터링할 수 있습니다.

  • FreeLocalStorage

  • ReadIOPSLocalStorage

  • ReadLatencyLocalStorage

  • ReadThroughputLocalStorage

  • WriteIOPSLocalStorage

  • WriteLatencyLocalStorage

  • WriteThroughputLocalStorage

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

RDS Optimized Reads 제한 사항

RDS Optimized Reads에는 다음과 같은 제한 사항이 적용됩니다.

  • RDS Optimized Reads는 RDS for MySQL 버전 8.0.28 이상에서 지원됩니다. RDS for MySQL 버전에 대한 자세한 내용은 Amazon RDS의 MySQL 버전 섹션을 참조하세요.

  • RDS Optimized Reads를 지원하는 DB 인스턴스 클래스에서는 임시 객체의 위치를 영구 스토리지(Amazon EBS)로 변경할 수 없습니다.

  • DB 인스턴스에서 이진 로깅이 활성화된 경우 최대 트랜잭션 크기는 인스턴스 스토어의 크기에 의해 제한됩니다. MySQL에서 binlog_cache_size 값보다 더 많은 스토리지가 필요한 세션은 인스턴스 스토어에 생성된 임시 binlog 캐시 파일에 트랜잭션 변경 사항을 기록합니다.

  • 인스턴스 스토어가 가득 차면 트랜잭션이 실패할 수 있습니다.