테크
2024. 08. 12
AWS RDS의 성능 개선 도우미 사용하기
비누팀이 선택한 모니터링 도구
관계형 데이터베이스 관리 시스템(Relational DataBase Management System, RDBMS)을 사용함에 있어서 테이블 설계의 중요성은 두말할 필요가 없습니다. 하지만 끊임없이 변화하는 비즈니스 요구를 반영하면서 항상 완벽한 설계를 유지하는 것은 매우 어려운 일입니다. 이러한 이유로 테이블 디자인 만큼 중요한 것이 모니터링입니다. 모니터링을 통해 달라진 비즈니스 요구사항을 빠르게 파악하고 데이터베이스 설계에 문제가 없는지 감시하는 것이 필수적입니다.
아마존 RDS의 성능 개선 도우미로 면밀하게 모니터링하기
비누랩스는 모니터링 도구로 아마존 RDS가 제공하는 ‘성능 개선 도우미(Performance Insights)’를 사용하고 있습니다. 이 도구는 데이터베이스를 실시간으로 분석하여 리소스를 가장 많이 소비하는 SQL 쿼리를 식별하고, 데이터베이스 부하의 원인을 찾아내는 데 도움을 줍니다. 성능 개선 도우미를 통해 서버 관리자는 데이터베이스의 성능 상태를 한눈에 파악할 수 있고, 백엔드 개발자는 성능 저하 문제를 빠르게 해결할 수 있어 전체 시스템의 안정성과 효율성을 높여줍니다.
성능 개선 도우미를 활용하는 방법은 주로 두 가지가 있습니다. 첫 번째 방법은 '절대 시간(Absolute Time)'을 설정하여 특정 시간에 발생한 문제를 직접 확인하는 것입니다. 이를 통해 어떤 변화로 인해 문제가 발생하기 시작했는지를 신속하게 파악할 수 있습니다. 두 번째 방법은 하루 이상의 기간을 설정하여 어떤 요소가 리소스를 많이 사용하는지 확인하는 것입니다. 데이터베이스의 사용 패턴은 종종 하루를 넘는 주기로 반복되기 때문에, 이러한 기간을 설정하면 반복되는 성능 문제를 효과적으로 식별할 수 있습니다.
다시 말하면, 절대 시간 설정을 통해 급작스러운 성능 저하의 원인을 빠르게 찾을 수 있고, 장기간의 분석을 통해 반복적인 문제를 미리 예측하고 해결할 수 있는 것입니다.
성능 개선 도우미의 진가를 확인할 수 있는 ‘차원’ 탭
성능 개선 도우미가 제공하는 정보는 크게 ‘차원(Dimensions)’과 ‘지표(Metrics)’로 나눌 수 있습니다. 지표 탭에서는 클라우드 워치에서 볼 수 있는 정보를 정리해서 보여줍니다. 보기는 편리하지만, 성능 개선 도우미를 통해 반드시 확인해야 할 정보는 아닙니다. 현재 데이터베이스의 상황을 한 눈에 파악할 수 있다는 장점은 있지만, 원인을 파악할 만큼 충분한 정보를 제공하지는 않습니다.
성능 개선 도우미의 진가는 차원 탭에서 확인할 수 있습니다. 차원 탭에는 🔺상위 대기(Top Waits) 🔺상위 SQL(Top SQL) 🔺상위 호스트(Top Hosts) 🔺상위 사용자(Top Users) 🔺상위 데이터베이스(Top databases)의 하위 탭이 있어, 각 탭에서 카테고리에 따라 데이터베이스 부하에 가장 큰 영향을 미치는 상위 25개 항목을 보여줍니다.
데이터베이스의 부하를 나타내는 지표는 다양합니다. CPU 사용량이나 디스크 I/O를 측정할 수도 있고, 쿼리(Query) 별로 하나씩 측정하기를 원한다면 응답 시간을 확인하면 됩니다. 하지만 이런 지표들은 목적에 따라 다르게 사용해야 하기 때문에 일관성 있는 지표로 사용하기 어렵습니다. 그래서 성능 개선 도우미는 ’평균 활성 세션(Average Active Sessions, AAS)’이라는 지표를 사용합니다. AAS는 특정 시간 동안 활동 중이거나 자원을 기다리고 있는 세션의 평균 수를 나타냅니다.
쉽게 말해, 어떤 데이터베이스의 AAS가 1,000이라면, 1,000개의 세션이 CPU를 사용해 쿼리를 실행하거나 디스크를 읽고 쓰거나 락이 풀리기를 기다리고 있는 상태라는 뜻입니다.
1️⃣ ’상위 대기’ 및 ‘상위 SQL’ 탭
상위 대기 탭에서는 AAS가 높은 대기 이벤트를 볼 수 있습니다. 여기서 이벤트 종류는 사용하는 데이터베이스 엔진에 따라 다릅니다. 예를 들어 Aurora MySQL을 사용하고 있다면, 스레드가 CPU에서 실행되거나 CPU 자원을 기다리고 있을 때 cpu
이벤트가 발생하고, 스토리지 엔진이 작업을 처리하는 것을 기다릴 때는 io/table/sql/handler
이벤트가 발생합니다. 이러한 이벤트들이 높게 나타나면, 인덱스 설계에 문제가 있는지, 또는 데이터베이스 인스턴스의 리소스가 부족한지 등을 확인해 문제를 해결해야 합니다.
“섣부르게 최적화하지 마라.” 개발할 때 흔히 하는 말입니다. 의도적으로 느린 코드를 작성할 필요는 없지만, 지나치게 최적화하면 코드가 복잡해져 개발 시간이 늘어나고 확장성에도 해를 끼칠 수 있습니다. 데이터베이스를 사용할 때도 마찬가지로, 모든 쿼리를 최적화할 필요는 없습니다. 리소스를 많이 사용하는 일부 쿼리만 최적화해도 큰 효과를 볼 수 있습니다. 상위 SQL 탭은 AAS가 높은 쿼리를 보여주므로, 이러한 쿼리들을 중점적으로 최적화하는 데 도움이 됩니다.
상위 SQL 탭은 성능 개선 도우미에서 가장 많이 사용됩니다. 이 탭은 많은 정보를 제공하여 다양한 상황에서 활용할 수 있습니다. 하지만 대부분의 정보는 특정 상황에서만 유용하고 평소에는 불필요할 수 있습니다. 따라서 필요한 정보만 선택해서 보는 것이 중요합니다. 어떤 정보를 볼지는 톱니바퀴 모양의 설정 버튼을 통해 세부적으로 조정할 수 있습니다.
이 탭에서 제공하는 정보는 크게 두 가지로 나뉩니다. 첫 번째는 1초 동안 얼마나 많은 리소스를 사용했는지에 대한 통계이고, 두 번째는 각 쿼리가 얼마나 많은 리소스를 사용했는지에 대한 통계입니다. 데이터베이스 서버에 가해지는 부하를 이해하려면 초 단위 통계를 확인하는 것이 유리합니다. 반면, 개별 쿼리의 성능을 평가하려면 각 쿼리 호출에 대한 통계를 확인하는 것이 필요합니다.
2️⃣ ’상위 호스트’와 ‘상위 사용자’, ‘상위 데이터베이스’ 탭
남은 세 가지 탭인 🔺상위 호스트 🔺상위 사용자 🔺상위 데이터베이스에서는 클라이언트의 주소와 사용자 단위, 데이터베이스 단위로 리소스를 많이 사용하는 출처를 확인할 수 있습니다. 의미있는 정보는 아니지만, 복잡한 시스템을 구성할 때 도움을 받을 수 있습니다. 예를 들어, 여러 시스템이 같은 데이터베이스를 사용할 때 각 시스템이 다른 계정을 사용하도록 설정하면, 각 시스템의 데이터베이스 사용 패턴을 개별적으로 분석할 수 있습니다.
성능 개선 도우미는 데이터베이스의 종류와 인스턴스에 따라 사용에 제한이 있을 수 있지만, 일반적으로 상용 서비스에서는 사용할 수 있습니다. 다만, 서울 지역에서는 사전 권장 사항(proactive recommendations)과 같은 일부 고급 기능을 사용할 수 없습니다. 그럼에도 불구하고 기본 기능만으로도 데이터베이스의 부하와 성능 문제를 자세히 파악할 수 있어, 팀이 필요한 정보를 바탕으로 빠르게 의사결정을 내리는 데 많은 도움을 받고 있습니다.
기본적으로 AWS RDS의 성능 개선 도우미는 최근 1주일간의 데이터를 보관합니다. 더 오랫동안 데이터를 보관하고 싶다면 추가 비용을 지불하면 최대 24개월까지 저장할 수 있습니다. 이렇게 하면 오랜 기간 동안의 성능 변화를 분석하는 데 도움이 됩니다. 그러나 단기적인 문제를 해결하기 위해서라면, 기본적으로 제공되는 1주일 치 데이터로도 충분히 문제를 찾고 해결할 수 있습니다. 처음에는 기본 설정을 사용해 보고, 필요에 따라 데이터를 더 오래 저장하는 옵션을 고려하는 것이 좋습니다.
지금까지 데이터베이스의 성능을 면밀히 모니터링하고 문제를 신속하게 진단하며 해결할 수 있는 성능 개선 도우미에 대해 자세히 알아보았습니다. 다양한 대체 도구들이 존재하지만, 비누랩스가 이 도구를 선택한 이유는 AWS RDS에서 사용할 수 있는 모니터링 도구 중에서 가장 설정하기 쉽기 때문입니다. 또한, CloudWatch나 iAM 같은 AWS 기능과 함께 사용하기 쉽다는 점도 중요한 이유 중 하나입니다. 시스템의 안정성을 보장하기 위해서는 정기적인 모니터링과 분석이 필수적인 만큼, 다양한 도구를 스터디한 후에 자사의 환경에 가장 적합한 도구를 선택하시길 바랍니다.
Written by 김슬기