
DynamoDB Limit 설정으로 RCU 97% 절감한 이야기
두줄요약
DynamoDB Query의 무제한 스캔과 Strong Consistent Read로 급증한 RCU 원인을 분석했습니다. SearchLimit과 Eventually Consistent Read 적용으로 RCU를 최대 97% 절감했습니다.
문제 상황
- 특정 서비스 배포와 트래픽 증가 이후 DynamoDB RCU 사용량 1k/s에서 최대 130k/s로 급증
- 최근 기록 조회 API에서 파티션당 평균 약 300개 아이템 전체 스캔과 Strong Consistent Read 사용
원인 분석
guregu/dynamo의Iter()가 첫Next()호출에서 페이지 전체를 조회하는 구조- 필터 사용 시
Limit()이 DynamoDB API의Limit으로 전달되지 않아 추가 페이지 반복 가능성 - Eventually Consistent Read 대비 2배 RCU를 소비하는 Strong Consistent Read
해결 방법
- 세션당 요청 수 P99 분석을 근거로 33~66 범위의
SearchLimit적용 - 조회 요구사항과 클라이언트 재시도 로직을 검토해 Eventually Consistent Read 전환
ConsumedCapacity로깅과 Query returned Item count 지표를 통한 RCU 소비 모니터링
성능/운영 포인트
- A 테이블 RCU 60k/s에서 8k/s로 87% 절감, C 테이블 70k/s에서 2k/s로 97% 절감
- API 성공률 유지와 p95 응답 시간 97% 감소
- 병렬 조회 취소로 발생하는
context.Canceled를 정상 동작으로 분류해 모니터링 예외 처리

