본문 바로가기
Database

[AWS / RDS] 성능 개선 도우미 활용하기

by jewook3617 2021. 6. 10.

현재 회사에서 RDS를 사용하고 있습니다. RDS의 성능 개선 도우미를 통해 현재 DB 인스턴스의 상태를 모니터링할 수 있지만 각 지표가 어떤 것을 의미하는지 몰라서 그에 맞는 적절한 해결방안을 적용하지 못하고 있었습니다. 이번 글에서는 RDS의 성능 개선 도우미가 제공하는 지표들이 어떤 것을 의미하는지에 대해 알아보며 알게 된 내용을 정리해보겠습니다.

 

데이터베이스 로드

RDS에서 제공하는 성능 개선 도우미에 들어가면 이런 화면을 볼 수 있습니다. 카운터 지표는 초당 발생하는 db transaction의 수를 보여줍니다.

그 밑에 보이는 차트는 데이터베이스 로드 입니다. 데이터베이스 로드 밑에 AAS(평균 활성 세션)에서 측정된 현재 활동이라고 적혀있지만 그게 무슨 의미인지 잘 몰랐습니다.

우선 활성 세션의 의미부터 정리해보겠습니다. 활성 세션이란 현재 db 인스턴스와 연결되어 있는 connection입니다. api 서버에서 db 쿼리를 날리기 위해서 db 인스턴스와 connection을 생성합니다. 이 connection은 db 인스턴스로부터 쿼리 결과를 전달받으면 connection을 끊습니다. 따라서 활성 세션은 db 인스턴스로부터 쿼리 결과를 전달받기 위해 대기 중인 connection입니다.

AAS(평균 활성 세션)이란 단위 시간 동안의 평균 connection을 의미합니다. 짧은 시간동안 connection의 생성과 끊어짐이 여러번 일어나기 때문에 성능 개선 도우미에서는 단위시간동안의 평균 connection 수를 측정하여 제공합니다.

차트 오른쪽에는 위 사진과 같은 정보들이 보입니다. 현재 차트는 대기 별 슬라이스가 Bar 형태로 보여지도록 선택되어 있습니다. 대기별 슬라이스에서 대기는 wait event를 의미합니다. wait event는 connection 기다리고 있는 event입니다. connection은 db 인스턴스가 wait event들을 처리하는 것을 기다리고 있는 것입니다.

데이터베이스 로드 차트는 단위 시간 동안 AAS(평균 활성 세션)을 측정하고 단위시간동안 어떤 wait event들을 기다리느라 connection을 끊지 못하고 있는지를 파악해 차트로 보여주는 것입니다. 

막대그래프에 마우스를 올리면 해당 단위 시간 동안의 활성 세션이 Total에 뜨고 해당 활성 세션들이 기다리고 있는 wait event들의 리스트와 비중이 표시됩니다. CPU는 쿼리 실행을 대기하고 있음을 의미하고 ClientWrite, BufFileWrite 등의 wait event들은 postgresql에서 제공하는 wait event들입니다.(현재 회사에서 postgresql을 사용하고 있습니다) postgresql에서 제공하는 wait event들의 목록과 설명은 여기서 볼 수 있습니다.

대기 별 슬라이스 말고도 다른 옵션을 선택해서 볼 수 있습니다.

 

상위 SQL

데이터베이스 로드 아래쪽에는 상위 SQL 차트가 있습니다.

상위 SQL 뿐만 아니라 상위 대기, 상위 호스트 등의 옵션을 선택해서 볼 수 있습니다.

이 차트는 AAS(평균 활성 세션)의 wait event를 많이 발생시키는 순으로 SQL 쿼리문을 보여줍니다. wait(AAS) 별 로드에는 해당 쿼리문이 발생시키는 wait event들이 보입니다.

wait(AAS) 별 로드에 보이는 막대그래프를 클릭하면 해당 쿼리문이 발생시키는 wait event들의 리스트와 비중이 보입니다. 위 쿼리의 경우 CPU wait가 많이 발생하므로 쿼리 실행 자체가 오래 걸린다는 것을 의미합니다.

db 인스턴스는 최대 vCPU 개수만큼의 활성 세션을 동시에 처리할 수 있습니다. 현재 저희 회사의 db 인스턴스는 8개의 vCPU를 사용하고 있으므로 동시에 8개의 활성 세션을 처리할 수 있습니다. 활성 세션이 8개가 넘어가면 큐에 쌓이고 대기해야 합니다. 트래픽이 증가하면 connection이 증가하기 때문에 하나의 connection이 처리되는데 오랜 시간이 걸린다면 활성 세션의 수가 늘어나 그만큼 시스템이 느려집니다.

활성 세션의 수를 낮게 유지하려면 db 인스턴스에 생기는 connection의 수를 낮추고 하나의 connection의 처리시간을 짧게 하는 것이 중요합니다. 캐시 서버를 이용하면 db에 걸리는 부하 자체를 줄여 connection의 수를 낮출 수 있습니다. 그리고 상위 SQL 차트에서 상위에 표시되는 SQL 쿼리문에 적절한 index를 걸어 쿼리 실행시간을 단축시켜 connection의 처리시간을 짧게 할 수 있습니다.

'Database' 카테고리의 다른 글

[Redis] AWS EC2에 redis-server setup 하기  (0) 2021.06.22