
RDS MySQL IOPS 장애 대응기
두줄요약
RDS MySQL의 gp2 Burst Balance 소진으로 발생한 IOPS 장애를 분석했습니다. 메모리 스케일업으로 working set을 확보해 Read IOPS를 크게 낮췄습니다.
문제 상황
- 광고 요청 사용자 조회 서비스에서 에러율, CPU throttling, 메모리·goroutine·MySQL replica connection 급증
- gp2 Burst Balance 소진에 따른 RDS 성능 저하와 timeout·DB connection 오류
원인 분석
- 5k RPS 대비 1~2k 수준의 Read IOPS와 지속적인 증가 추세
- Buffer pool hit ratio 98%에도 32GB RAM 대비 데이터·인덱스 170GB로 working set 메모리 부족 판단
해결 방법
- 장애 우선 대응으로 스토리지 800GB에서 999GB로 증설
- m5.2xlarge에서 r6g.2xlarge, r6g.4xlarge로 전환해 메모리 32GB에서 128GB로 스케일업
- Read IOPS를 약 3000에서 80 수준으로 낮추고 Freeable Memory·Read throughput 개선
트레이드오프
- 스토리지 증설은 근본 원인 해결보다 Burst IOPS 대응 목적
- Redis read cache는 시스템 복잡도와 캐시 장애 시 DB burst 위험으로 제외
- 인스턴스 비용 증가에 따른 인덱스 최적화·다운사이징 및 DynamoDB 비교 검토


