DB 자동 스케일업(Cluster Auto-Scaling) 옵션을 끈다고 해서 즉시 DB가 다운되는 것은 아닙니다.
스케일업을 유발했던 트래픽 부하나 무거운 쿼리가 다시 발생할 경우, 제한된 리소스(CPU, RAM) 한계에 부딪히면서 사실상 다운에 준하는 서비스 장애가 발생할 확률이 매우 높습니다.
리소스 한계 도달 시 발생하는 문제
-
극심한 성능 저하 및 타임아웃 (가장 흔한 케이스)
-
CPU 리소스가 고갈되거나 메모리가 부족해지면 쿼리 처리 속도가 현저히 느려집니다.
-
결국 애플리케이션 서버에서 DB의 응답을 제때 받지 못해 커넥션 타임아웃(Connection Timeout)이 발생하고, 사용자 입장에서는 서비스가 다운된 것과 똑같이 느끼게 됩니다.
-
-
OOM (Out of Memory)으로 인한 DB 프로세스 강제 종료
-
할당된 메모리(RAM) 용량을 초과하여 사용하게 되면, 시스템(OS)이 데이터베이스 프로세스를 강제로 종료(Kill)할 수 있습니다.
-
이 경우 프로세스가 자동으로 재시작되긴 하지만, 재시작되는 시간 동안 실제 다운타임(Downtime)이 발생합니다.
-
-
(참고) 스토리지 스케일링 옵션의 경우
-
만약 스케일업이 아니라 스토리지(Storage) 오토 스케일링까지 꺼둔 상태에서 디스크 용량이 100% 꽉 차게 된다면, DB는 더 이상 쓰기(Write) 작업을 할 수 없어 확실하게 작동을 멈추게 됩니다.
-
근본적인 해결을 위한 권장 사항
단순히 과금 문제로 오토 스케일링 옵션을 끄는 것은 위험할 수 있으므로, 왜 자꾸 스케일업이 일어나는지 병목 원인을 파악하고 최적화하는 작업이 반드시 선행되어야 합니다.
-
인덱스(Index) 누락 확인: Performance Advisor를 확인해야합니다. 인덱스를 타지 않고 전체 데이터를 찾는 쿼리(COLLSCAN) 하나가 CPU와 메모리를 모두 잡아먹는 경우가 가장 많습니다.
-
비효율적인 쿼리 및 로직 점검: 한 번에 너무 많은 데이터를 불러오거나, 복잡한 Aggregation 파이프라인이 자주 실행되는지 확인이 필요합니다.
-
Connection Pool 최적화: 애플리케이션의 커넥션 풀 사이즈가 너무 크게 잡혀 있어서 불필요한 메모리를 점유하고 있는지 점검해 보세요.
-
경고 알림(Alert) 설정: 옵션을 끄기로 결정하셨다면, CPU나 메모리 사용률이 80%~90%에 도달했을 때 이메일이나 메신저로 즉각적인 알림이 오도록 Atlas Alert를 반드시 설정해 두어야 장애를 미연에 방지할 수 있습니다.