CloudWatch에서 awsrds-myapp-standalone-High-rds_disk_running_out ALARM이 연속 5회 발생했다. RDS 디스크가 꽉 차면 DB가 읽기 전용 모드로 전환되어 서비스가 중단된다.
Table of contents
Open Table of contents
장애 타임라인
09:21 — ALARM: rds_disk_running_out
09:35 — ALARM: rds_disk_running_out
09:48 — ALARM: rds_disk_running_out
10:00 — ALARM: rds_disk_running_out
11:42 — ALARM: rds_disk_running_out
약 15분 간격으로 알람이 반복됐다. 디스크 사용량이 임계값을 넘어 지속적으로 증가하고 있다는 의미다.
원인 분석
RDS 디스크가 급격히 차는 원인:
1. 바이너리 로그 (binlog)
리플리카 연결이나 PITR(Point-in-Time Recovery)을 위해 binlog가 쌓인다:
SHOW BINARY LOGS;
-- 파일 크기와 개수 확인
binlog 보관 기간이 길거나 리플리카 지연이 있으면 급격히 증가한다.
2. 슬로우 쿼리/제너럴 로그
로그 활성화 상태에서 트래픽이 급증하면 로그 파일이 빠르게 증가한다.
3. 임시 테이블
대량 JOIN이나 정렬 작업에서 디스크 기반 임시 테이블이 생성된다:
SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables';
4. InnoDB 임시 테이블스페이스
MySQL 8.0에서는 세션별 임시 테이블스페이스가 자동 확장된다.
즉시 대응
1. 디스크 여유 공간 확인
-- RDS에서는 CloudWatch 메트릭으로 확인
-- FreeStorageSpace (bytes)
또는 AWS CLI:
aws cloudwatch get-metric-statistics \
--namespace AWS/RDS \
--metric-name FreeStorageSpace \
--dimensions Name=DBInstanceIdentifier,Value=myapp-standalone \
--start-time 2026-01-08T00:00:00Z \
--end-time 2026-01-08T23:59:59Z \
--period 300 \
--statistics Minimum
2. binlog 정리
-- binlog 보관 시간 단축 (기본 NULL = 무제한)
CALL mysql.rds_set_configuration('binlog retention hours', 24);
-- 또는 수동 삭제 (RDS 프로시저)
CALL mysql.rds_rotate_general_log;
CALL mysql.rds_rotate_slow_log;
3. 스토리지 확장
aws rds modify-db-instance \
--db-instance-identifier myapp-standalone \
--allocated-storage 100 \ # GB 단위
--apply-immediately
주의: 스토리지 확장은 축소 불가다. 신중하게 결정한다.
4. 스토리지 오토스케일링 활성화
aws rds modify-db-instance \
--db-instance-identifier myapp-standalone \
--max-allocated-storage 200 \ # 최대 한도
--apply-immediately
오토스케일링이 활성화되면 여유 공간이 10% 미만일 때 자동으로 확장된다.
재발 방지
모니터링 강화
알람 설정:
├── Warning: FreeStorageSpace < 20% (이메일)
├── Critical: FreeStorageSpace < 10% (SMS/전화)
└── 추세 알람: 24시간 내 20% 이상 감소 시 (이메일)
정기 점검 항목
| 항목 | 주기 | 명령 |
|---|---|---|
| binlog 크기 | 주간 | SHOW BINARY LOGS |
| 테이블 크기 | 월간 | information_schema.TABLES |
| 임시 테이블 사용 | 주간 | Created_tmp_disk_tables |
| 로그 파일 크기 | 주간 | CloudWatch RDS 메트릭 |
근본 대책
- 스토리지 오토스케일링: 반드시 활성화 (최대 한도 설정)
- binlog 보관 기간 제한: 24~48시간으로 설정
- 슬로우 쿼리 최적화: 임시 테이블을 만드는 쿼리 개선
- 데이터 아카이빙: 오래된 데이터는 S3로 이관
정리
RDS 디스크 풀은 예방 가능한 장애다. 스토리지 오토스케일링을 켜고, binlog 보관 기간을 제한하고, 여유 공간 알람을 20% 시점에 설정한다. 연속 ALARM이 오기 전에 미리 대응한다.