
백엔드
Amazon DocumentDB 인덱스 최적화로 미리캔버스의 쿼리 성능을 개선 사례
두줄요약
Amazon DocumentDB 전환 후 발생한 인덱스와 쿼리 성능 문제를 실제 사례로 정리했습니다. explain, profiler, 인덱스 재설계와 쿼리 변경으로 성능을 개선했습니다.
문제 상황
- MongoDB Atlas에서 Amazon DocumentDB로 전환한 뒤, 동일한 쿼리와 인덱스가 기대와 다르게 동작하는 성능 이슈 발생
- 부분 인덱스, $or/$in 정렬, 정규식, 단일 문서 쓰기 경합 등에서 쿼리 지연과 쓰기 지연 확인
원인 분석
- Amazon DocumentDB의 Query Planner가 MongoDB와 달라 동일한 인덱스 전략이 그대로 통하지 않음
- partial index는 쿼리 필터와 정확히 일치해야 하며, SORT_MERGE 미지원으로 $or + sort 패턴이 비효율화
- MVCC 기반 구조에서 hot document, 통계 워밍 부족, GC 동작 등이 성능에 영향
해결 방법
- partial index 대신 일반 복합 인덱스 사용 또는 partialFilterExpression을 쿼리 패턴에 맞게 재설계
- $or 쿼리 분리 후 애플리케이션 레벨 병합, regex를 range 쿼리로 변환해 IXSCAN 유도
- $inc 집중을 Redis로 분산하고, explain()과 profiler로 실제 실행 계획과 느린 쿼리를 지속 점검
적용해볼 점
- 전환 직후 모든 주요 쿼리에 대해 explain() 재검증
- hot document, 불필요한 정렬/필터, 샤드키 잔재 조건 점검
- MVCC ID, GC, 캐시 히트율, IO 비용을 함께 모니터링
