Amazon RDS 인스턴스의 IOPS 병목 현상으로 인해 발생하는 Amazon EBS 볼륨의 대기 시간 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 10월 11일

Amazon Relational Database Service(Amazon RDS) DB 인스턴스가 있습니다. Amazon RDS 인스턴스에서 Amazon Elastic Block Store(Amazon EBS) 볼륨의 대기 시간 문제를 해결하고 싶습니다.

해결 방법

IOPS 또는 처리량 병목 현상으로 인해 Amazon RDS 인스턴스의 대기 시간이 발생하는 가장 일반적인 이유는 다음과 같습니다.

  • 인스턴스 수준에서 IOPS 병목 현상
  • 볼륨 수준에서 IOPS 병목 현상
  • 인스턴스 수준에서 처리량 병목 현상
  • 볼륨 수준에서 처리량 병목 현상
  • 마이크로버스트

사용 사례에 따라 다음의 문제 해결 단계를 사용합니다.

범용 SSD(gp2)를 사용하는 RDS 인스턴스

다음 검사를 수행합니다.

  1. DB 인스턴스 클래스 및 스토리지 크기와 같은 Amazon RDS 인스턴스의 구성 정보를 확인합니다. 이 정보는 IOPS 및 처리량 한도를 추적하는 데 도움이 될 수 있습니다. IOPS 또는 처리량 병목 현상을 유발하는 문제를 해결할 때 이러한 값을 알아야 합니다.
  2. Amazon CloudWatch 그래프를 사용해 DiskQueueDepth, ReadLatency, WriteLatency의 값에 스파이크가 있는지 확인합니다. 정상적인 상황에서는 1,000 IOPS마다 분당 하나의 DiskQueueDepth를 사용하는 것이 가장 좋습니다. ReadLatency 및 WriteLatency는 10밀리초 미만일 것입니다. 스파이크가 발견되면 스파이크 시간을 식별합니다.
  3. CloudWatch 그래프를 사용하여 ReadIOPSWriteIOPS 지표를 봅니다. DiskQueueDepth, ReadLatency, WriteLatency 값의 스파이크 기간 동안 볼륨 수준에서 IOPS 한도가 위반되었는지 확인합니다.
  4. CloudWatch 그래프를 사용하여 BurstBalance 값이 감소하는지 확인합니다. 이 검사는 크기가 1TB 미만인 볼륨에만 적용할 수 있습니다. BurstBalance 값이 감소하면 스파이크 기간 동안 IOPS 병목 현상이 발생했음을 확인할 수 있습니다.
  5. CloudWatch 그래프를 사용하여 ReadThroughputWriteThroughput 지표를 봅니다. ReadThroughput 및 WriteThroughput 값의 스파이크 기간 동안 볼륨 수준에서 처리량 한도가 위반되었는지 확인합니다.
  6. EBS 최적화 RDS 인스턴스 클래스를 사용하는 경우 CloudWatch 그래프를 사용하여 IOPS 또는 처리량 제한을 확인합니다. 버스트 용량이 있는 인스턴스 클래스의 경우 CloudWatch 그래프에서 EBSIOBalance%EBSByteBalance% 지표를 봅니다. EBSIOBalance% 또는 EBSByteBalance% 값이 일관되게 낮으면 인스턴스 수준에서 IOPS 또는 처리량 병목 현상이 발생했음을 나타냅니다.

IOPS 또는 처리량 또는 둘 모두가 제한되면 IOPS 또는 처리량이 스토리지 수준에서 워크로드에 적합하지 않음을 나타냅니다. 이 문제를 수정하려면 다음을 수행합니다.

  • 데이터베이스에 더 많은 부하를 생성하는 SQL 쿼리를 찾은 다음 해당 쿼리를 최적화합니다. 워크로드가 예상과 같거나 SQL 쿼리 튜닝 범위가 없는 경우 IOPS 용량을 늘리려면 스토리지 크기를 늘려야 할 수 있습니다.
    참고: RDS 인스턴스의 스토리지 크기를 늘린 후에는 크기를 이전 값으로 줄일 수 없습니다.
  • 볼륨을 범용(gp2)에서 프로비저닝된 IOPS(io1)로 전환하는 것이 좋습니다. DB 인스턴스가 단일 AZ이고 사용자 지정 파라미터 그룹을 사용하는 경우 gp2와 io1 사이를 전환할 때 짧은 가동 중지 시간이 발생할 수 있습니다. 인스턴스가 다중 AZ인 경우 가동 중지 시간이 발생하지 않습니다.
  • 인스턴스 수준에서 IOPS 또는 처리량의 제한이 발견되면 더 높은 IOPS 또는 처리 용량을 얻기 위해 인스턴스 클래스를 확장해야 합니다.

프로비저닝된 IOPS(io1)를 사용하는 RDS 인스턴스

  1. DB 인스턴스 클래스 및 정의된 프로비저닝된 IOPS와 같은 Amazon RDS 인스턴스의 구성 정보를 확인하여 DB 인스턴스 클래스에 대한 IOPS 한도 또는 처리량 한도를 확인합니다.
  2. CloudWatch 그래프를 사용하여 DiskQueueDepth, ReadLatency, WriteLatency의 값에 스파이크가 있는지 확인합니다. 정상적인 상황에서는 1,000 IOPS마다 분당 하나의 DiskQueueDepth를 사용하는 것이 가장 좋습니다. ReadLatency 또는 WriteLatency는 10밀리초 이내일 것입니다. 스파이크가 발견되면 스파이크 시간을 식별합니다.
  3. CloudWatch 그래프를 사용하여 ReadIOPS 및 WriteIOPS 지표를 봅니다. DiskQueueDepth, ReadLatency, WriteLatency 값의 스파이크 기간 동안 IOPS 한도가 위반되었는지 확인합니다.
  4. CloudWatch 그래프를 사용하여 ReadThroughput 및 WriteThroughput 지표를 봅니다. ReadThroughput 및 WriteThroughput 값의 스파이크 기간 동안 처리량 한도가 위반되었는지 확인합니다.
  5. EBS 최적화 RDS 인스턴스 클래스를 사용하는 경우 CloudWatch 그래프를 사용하여 IOPS 또는 처리량 제한을 확인합니다. 버스트 용량이 있는 인스턴스 클래스의 경우 CloudWatch 그래프에서 EBSIOBalance% 및 EBSByteBalance% 지표를 봅니다. EBSIOBalance% 또는 EBSByteBalance%의 백분율 값이 일관되게 낮으면 인스턴스 수준에서 IOPS 또는 처리량 병목 현상이 발생했음을 나타냅니다.

IOPS 또는 처리량의 제한은 IOPS 또는 처리량이 스토리지 수준에서 워크로드에 적합하지 않음을 나타냅니다. 이 문제를 수정하려면 다음을 수행합니다.

  • 데이터베이스에 더 많은 부하를 생성하는 SQL 쿼리를 찾은 다음 해당 쿼리를 최적화합니다. 워크로드가 예상과 같거나 SQL 쿼리 튜닝 범위가 없는 경우 프로비저닝된 IOPS 용량을 늘려야 할 수 있습니다.
  • 인스턴스 수준에서 IOPS 또는 처리량의 제한이 발견되면 더 높은 처리 또는 IOPS 용량을 얻기 위해 인스턴스 클래스를 확장해야 합니다.

마이크로버스트

마이크로버스트는 EBS 볼륨이 수집 기간보다 훨씬 짧은 기간 동안 높은 IOPS 또는 처리량을 “버스트”할 때 발생합니다. CloudWatch 지표는 60초 간격으로 수집됩니다. 수집 기간보다 짧은 시간 동안 볼륨이 높은 IOPS 또는 처리량을 버스트하므로 CloudWatch는 버스트를 반영하지 않습니다. 향상된 모니터링을 사용하여 마이크로버스트로 인해 대기 시간이 발생하는지 확인할 수 있습니다. 향상된 모니터링을 1초 단위로 설정하여 켭니다. 읽기 IO/초쓰기 IO/초 지표를 사용하여 실제 IOPS 사용률을 확인할 수 있습니다. 읽기 KB/초쓰기 KB/초를 사용하여 초당 실제 처리량 사용률을 확인할 수 있습니다. 자세한 내용은 향상된 모니터링 지표 설명을 참조하세요.