SQL 튜닝으로 이뤄낸 다운스케일 성공기
많은 기업들이 비용 절약과 관리 편의성을 목적으로 클라우드 환경의 데이터베이스를 도입하고 있습니다. 하지만 실제 도입해서 사용해보면, 관리 비용이 적지는 않습니다.
현재(2025년 6월 26일) 기준으로 AWS에서 Aurora(PostgreSQL)을 다음과 같은 사양으로 사용한다면, DB 인스턴스 비용만 한달에 약 2천 8백 8십만원이 필요합니다.
•
Aurora(PostgreSQL Compatible) - 16.6
◦
Aurora I/O 최적화 스토리지 구성
◦
db.r5.16xlarge (64 vCPU, 512 GB, 13,600 Mbps)
◦
DB 인스턴스 월 예상 21257.60 USD → 약 2,880만원(2025.6.27 환율 기준)
만약에, DB 사양을 절반으로 낮춘다면, DB 인스터스 비용은 거의 절반 정도를 절약할 수 있습니다. (스토리지 비용은 별도이므로 고려하지 않습니다.) 16xlarge를 8xlarge로 낮춘다면 한달에 1,440만원을 절약할 수 있는 것이죠. 이러한 비용이 1년이 쌓이면, 약 1억 7,280만원을 절약할 수 있습니다.
그런데, DB 다운스케일을 쉽게 할 수 있을까요? 만약에 현재 DB의 평소 CPU 사용률이 항상 50% 이상이라면 DB 다운스케일을 할 수 없습니다. DB 용량을 절반으로 낮추는 순간 CPU 사용률은 두배가 되서 100%를 가득 채울 가능성이 높습니다. 또한, 평소에 CPU 사용률이 50%가 안되지만, 특정 시점에 50%를 넘어서는 경우도 다운스케일을 시도하기는 어렵습니다. 다운스케일 후에는 특정 시점에 DB가 CPU를 100% 사용하는 상황이 발생할 수 있습니다. CPU 사용률이 100% 상태가 되면, DB의 처리 시간은 급격히 느려지게 됩니다.
DB 다운스케일을 하려면 현재 DB의 CPU 사용률을 낮추어야 합니다. 평소에 DB CPU 사용률이 30% 미만이고, 피크 시점에 40% 정도라면, DB 용량을 절반으로 다운스케일 해볼 수 있습니다. 그렇다면 DB CPU 사용률을 어떻게 낮추어야 할까요? 제가 경험한 환경에서는 SQL 튜닝이 바로 DB CPU를 낮추는 키였습니다.
DB에서 가장 많은 부하를 차지하는 SQL들을 찾아, SQL들의 성능을 낮출 수 있다면, 그 만큼 DB CPU 사용률은 줄어들게 됩니다. 아래는, 제가 경험한 실제 사례를 간단하게 그려본 것입니다.
위 차트의 시스템은, DB CPU가 많을 때는 90% 이상을 차지하고 있었습니다. 그럴때면, 시스템이 느려져 고객들의 온갖 불만이 쏟아졌습니다. CPU 사용률을 낮추기 위해 내부적으로 다양한 방법을 시도했지만 효과가 별로 없었고, DB 용량을 더 늘리거나 SQL 튜닝이란걸 받아보자란 의견이 나왔던거 같습니다. DB 용량을 높이는 것은 매월 고정 비용이 늘어나므로, 우선은 일회성 비용으로 SQL 튜닝을 받기로 결정을 하고, 감사하게도 저희 회사에 연락을 해주셨습니다.
SQL 튜닝 프로젝트 투입 시점에는 CPU 사용률이 35% 정도였습니다. 시점에 따라 트랜잭션이 늘어나거나, 배치 작업이 작동하면 60%를 넘어 100% 가까이 갈지도 모른다고 하더군요. 어쨋든, DB 상황을 점검하고, 가장 핵심적인 SQL 2건을 우선 튜닝해 반영했습니다. 해당 건을 반영하자 마자, DB CPU는 35%에서 25%까지 감소한 것을 확인할 수 있었습니다. 계속해서 중요도가 높은 SQL을 튜닝하고 반영하자 CPU는 20%까지 감소되고 최종 10%까지 감소한 것을 확인할 수 있었습니다. 감사하게도 고객사의 개발자분들이 적극적으로 튜닝안을 반영해준 덕에 빠르게 효과를 볼 수 있었습니다.
CPU 사용률이 10% 미만으로 떨어지자, 모두가 ‘혹시 트래픽이 줄어든 게 아닐까?’하는 의문까지 가졌습니다. 하지만, 사용량에 대한 지표를 확인해보니, 사용량은 한달전과 동일했습니다. SQL 튜닝으로 CPU 사용률이 감소한 것이죠.
결과적으로 이 회사는 DB의 용량을 정확히 다운스케일을 할 수 있었습니다. 절반으로 다운스케일하자, 재밌게도 CPU 사용률이 딱 두 배인 20%까지 오르는걸 확인할 수 있었습니다.
약 두 달 정도의 짧은 프로젝트였습니다. 두 달 정도의 SQL 튜닝 비용을 투자해, DB 스펙을 절반으로 낮추었으니, 앞으로를 생각해보면, 어마어마한 비용을 절약한 것입니다. DB가 한 대가 아닌, 여러 대라면 더 많은 비용을 절약하게 된 것이죠.
모든 시스템이 이처럼 SQL 튜닝으로 DB 다운스케일을 할 수 있다고 장담할 수는 없습니다. 이미 SQL 최적화가 모두 이루어진 시스템이거나, SQL 튜닝안 자체가 너무 어려워 반영할 수 없는 상황도 있습니다. 효과있는 SQL 튜닝안이 존재하면서, 해당 튜닝안을 개발자들이 적극적으로 반영할 수 있을때, DB 다운스케일을 시도해 볼 수 있습니다.
끝으로, SQL 튜닝을 한 번 진행했다고 데이터베이스 성능이 영원히 안정적이라면 좋겠지만, 그럴 수는 없습니다. 시스템에는 계속해서 데이터가 쌓이고 새로운 기능이 항상 추가되기 때문이죠. 안정적인 성능을 유지하기 위해서는 개발자 모두가 SQL 성능에 신경을 쓰면서, 자신의 역량을 강화해야 합니다.
> 클라우드 환경의 데이터베이스를 다운스케일 하고 싶으신가요?
> SQL 튜닝을 한 번도 받아본 적이 없으신가요?
> 디비안(DBian)으로 연락주세요.
•
homepage: http://dbian.co.kr/
•
mail: biz@dbian.co.kr