Amazon RDS DB 인스턴스의 쓰기 지연 시간 급증 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 7월 14일

Amazon Relational Database Service(RDS) DB 인스턴스의 쓰기 지연 시간 급증 문제를 해결하려고 합니다.

간략한 설명

Amazon CloudWatch 지표 WriteLatency 시간은 디스크 I/O 작업당 소요되는 평균 시간을 정의합니다. 이상적으로는 쓰기 지연 시간이 한 자리 밀리초를 넘지 않아야 합니다.

다음과 같은 경우 DB 인스턴스의 쓰기 지연 시간 스파이크가 발생할 수 있습니다.

이러한 급증은 데이터베이스의 과중한 워크로드로 인해 발생하는 IOPS 또는 처리량(throughput) 병목 현상으로 인해 발생할 수도 있습니다.

해결 방법

지연 시간 급증 문제 해결

1.    DB 인스턴스의 읽기 또는 쓰기 지연 시간이 길어지는 원인을 해결하려면 다음 CloudWatch 측정치를 확인하십시오.

  • ReadLatency 및 WriteLatency
  • ReadIOPS 및 WriteIOPS
  • ReadThroughput 및 WriteThroughput
  • DiskQueueDepth
  • BurstBalance (gp2 스토리지 용)

다음 중 하나 이상을 발견했다고 가정해 보겠습니다.

  • 지연 시간 값이 높습니다.
  • 처리량(throughput) 및 IOPS 값이 최대 한도에 도달했습니다.
  • DiskQueueDepth 값이 높습니다.
  • BurstBalance 값이 낮습니다 (gp2의 경우).

즉, RDS 인스턴스의 워크로드가 많아 더 많은 리소스가 필요합니다. 자세한 정보는 Amazon RDS 인스턴스의 IOPS 병목 현상으로 인해 발생하는 Amazon EBS 볼륨의 대기 시간 문제를 해결하려면 어떻게 해야 하나요?를 참조하십시오.

IOPS 또는 처리량(throughput) 병목 현상을 유발하는 문제를 해결하려면 다음을 수행합니다.

범용 SSD(gp2)를 사용하는 RDS 인스턴스의 경우, DB 인스턴스 클래스와 스토리지 크기를 확인합니다.

프로비저닝된 IOPS(io1)를 사용하는 RDS 인스턴스의 경우, DB 인스턴스 클래스와 정의된 프로비저닝된 IOPS를 확인합니다.

자세한 내용은 DB 인스턴스 클래스Amazon EBS 최적화 인스턴스 단원을 참조하십시오.

2.    CloudWatch 측정치가 리소스 제한을 나타내지 않는 경우 Enhanced Monitoring을 사용하여 읽기 입출력/초 및 쓰기 입출력/S를 확인합니다.

CloudWatch 지표는 60초 간격으로 기록됩니다. 따라서 모든 급증 또는 하락이 기록되지 않을 수 있습니다. 그러나 Enhanced Monitoring의 세분도를 최대 1초로 설정하여 데이터를 캡처할 수 있습니다. 60초 간격 내에 리소스 사용률이 급증하는 경우, Enhanced Monitoring으로 캡처할 수 있습니다. 자세한 정보는 EBS 볼륨이 마이크로버스트 중인지 어떻게 확인할 수 있으며 이 문제를 방지하려면 어떻게 해야 합니까?를 참조하십시오.

3.    위의 모든 검사 결과가 문제의 원인을 나타내지 않는 경우 CloudWatch 측정치 NetworkReceiveThroughput 및 NetworkTransmitThroughput을 확인하여 네트워크에 문제가 없는지 확인합니다.

지연 로딩의 영향 완화

스냅샷에서 RDS 데이터베이스 인스턴스를 복원할 때, DB 인스턴스는 백그라운드에서 데이터를 계속 로드합니다. 이 프로세스를 지연 로딩이라고 합니다.

지연 로딩은 특정 시점으로 복원, 단일 AZ 인스턴스를 다중 AZ 인스턴스로 변환, 새 읽기 전용 복제본 생성 등 스냅샷에서 복원해야 하는 모든 시나리오에서 발생할 수 있습니다. 아직 로드되지 않은 데이터에 액세스하려고 하면 DB 인스턴스는 Amazon Simple Storage Service(S3)에서 요청된 데이터를 즉시 다운로드합니다. 그런 다음 인스턴스는 백그라운드에서 나머지 데이터를 계속 로드합니다. 자세한 내용은 Amazon EBS 스냅샷 생성을 참조하십시오. 빠른 액세스가 필요한 테이블에 대한 지연 로딩의 영향을 완화하기 위해 SELECT*와 같이 전체 테이블 스캔을 포함하는 작업을 수행할 수 있습니다. 이렇게 하면 RDS가 Amazon S3에서 백업된 모든 테이블 데이터를 다운로드할 수 있습니다.

모범 사례 따르기

DB 인스턴스에서 높은 쓰기 지연 시간을 처리할 때는 다음 모범 사례와 해결 방법을 염두에 두십시오.

  • 쿼리를 실행할 수 있는 충분한 리소스가 데이터베이스에 할당되어 있는지 확인합니다. RDS의 경우 할당된 리소스의 양은 인스턴스 유형에 따라 다릅니다.
  • CloudWatch 지표와 향상된 모니터링 지표가 리소스 제한을 나타내지 않는 경우 성능 통찰력을 사용하여 데이터베이스 워크로드를 모니터링합니다. Performance Insights를 사용하면 애플리케이션에서 지연 시간이 발생할 때 데이터베이스에서 실행 중인 기본 SQL 쿼리를 식별할 수 있습니다. 이 정보를 사용하여 데이터베이스의 부하를 평가하고 추가 작업을 결정할 수 있습니다. 자세한 정보는 Amazon RDS의 성능 개선 도우미로 DB 로드 모니터링을 참조하십시오.
  • 사용 사례에 따라 Amazon EBS 볼륨의 크기 또는 유형을 변경하여 마이크로 버스팅을 방지합니다.
  • 데이터베이스 성능을 최적화하려면 쿼리가 제대로 조정되었는지 확인합니다.
  • 단일 AZ 데이터베이스 인스턴스를 다중 AZ 인스턴스로 변환하는 경우 업무 외 시간에 변환하는 것이 좋습니다.
  • 다중 AZ 변환 후 지연 로드의 영향을 줄이려면 다음 중 하나를 수행해 보십시오.
    • 다중 AZ 인스턴스로 변환한 직후 수동 장애 조치를 수행합니다.
    • 전체 덤프를 실행하거나 필요한 쿼리만 실행하여 테이블에서 모든 데이터를 로드합니다. 이 프로세스는 데이터를 로드하고 모든 블록을 S3에서 새 호스트로 강제 푸시하는 데 도움이 될 수 있습니다. Amazon RDS for PostgreSQL 인스턴스의 경우 pg_prewarm 명령을 실행할 수 있습니다.
  • RDS 인스턴스에서 쓰기 지연 시간이 급증하는 이유를 확인하는 데 유용한 RDS 주요 지표에 Amazon CloudWatch 경보를 구성할 수 있습니다. 이러한 메트릭의 예로는 ReadIOPS, WriteIOPS, ReadThroughput, WriteThroughput, DiskQueueDepth, ReadLatency 및 WriteLatency.이 있습니다. 이러한 경보를 사용하여 인스턴스가 조절되지 않도록 할 수 있습니다.