Question

현재 저희는 Amazon RDS MySQL 을 사용 중에 있습니다.

저희 서비스 특징상 메모리는 거의 사용하지 않고, 

CPU 사용량이 메모리 사용량보다 매우 많습니다. 


혹시 CPU의 부담을 줄여 줄 수 있는 튜닝 포인트가 있는지 궁금합니다.



Answer

현재 사용중이신 Amazon RDS MySQL DB 인스턴스에서 메모리를 이용하여 CPU 부담을 줄일 수 있는 방법에 대해 안내드리겠습니다. 

만약 T Type 인스턴스를 사용하고 계신다면,

T 타입의 인스턴스는 워크로드가 기본 임계 값 이하로 작동하는 동안 CPU 크레딧을 축적하며, 

필요한 경우 획득한 각 CPU 크레딧을 1분 동안 CPU 코어의 전체 성능을 사용하여 버스팅할 수 있는 기회를 제공합니다. 

CPU 크레딧을 지속적으로 소진하고 있진 않은지 확인 해보시기 바랍니다.


T Type 인스턴스를 사용하고 있는 고객이라는 가정하에 CPU 부하 감소를 위해 아래 항목에 대해 고려해보시기를 권고드립니다. 


1. DB 인스턴스 타입 변경[1]

앞서 설명 한 것처럼, CPU 크레딧을 소진하고 있다면 CloudWatch 모니터링을 통해서 그간 워크로드를 살펴보시고 판단 하실 필요가 있습니다. 

  1. 일시적인 트래픽 증가일 경우
    t type 인스턴스를 유지하시면서 일시적인 대응을 위하여 Scale-up을 진행
    Ex : t3.medium -> t3.large 혹은 vCPU가 높은 t3.xlarge

  2. 평균 트래픽 상승 혹은 지속적인 트래픽 증가
    CPU 사용률이 높다면 c5, 메모리 사용량이 높다면 r5타입으로 변경 을 진행해보실 수 있습니다. 


2. "성능 개선 도우미"를 이용하여 부하를 주는 DB 쿼리에 대한 튜닝 

두 번째로 "성능 개선 도우미"를 이용하여  해당 DB 인스턴스에 부하를 주는 DB 쿼리를 식별하고 해당 쿼리에 대한 튜닝을 진행하는 방법이 있을 수 있습니다. 

CPU에 부하를 주는 상위 SQL문을 확인하고 EXPLAIN 쿼리를 통하여 실행 계획을 확인하신 뒤,  이슈가 발생하는 부분을 확인하시고 쿼리 변경이나 인덱스 추가 등의 DB 튜닝을 고려해 보시는 것이 좋습니다. 

EXPLAIN 구문에 대한 자세한 내용은 아래 링크를 참조하여 주시기 바랍니다. 

또한 프로파일링/ANALYZE 테이블을 통한 테이블 인덱스 통계 개선 등을 고려해보실 수 있습니다 


Reference

[1] Amazon RDS 인스턴스 유형 

[2] MySQL 8.0 Reference Manual :: 13.8.2 EXPLAIN Statement 

[3] Amazon RDS for MySQL 또는 Amazon Aurora MySQL 인스턴스에서 높은 CPU 사용률 문제는 어떻게 해결합니까?