본문 바로가기

Computer Science/DB

슬로우 쿼리 모니터링 - AWS CloudWatch

https://porolog.tistory.com/53

 

DB Bulk Insert, Jmeter 부하테스트

안녕하세요, 오늘은 Issue Tracker 프로젝트를 진행하면서 10만건 이상의 데이터에서 비정상적으로 느린 API 응답을 어떻게 개선했는지 기록을 공유하고자 포스팅을 작성합니다. Spring Data JDBC로 Bulk I

porolog.tistory.com

저번 포스팅에서 메인 페이지의 GET 요청을 보냈을 때 200회의 요청을 보내면 평균적으로 36초의 시간이 걸리는 것을 확인했습니다. JDBC Connection Timeout이 발생하여, DB에서의 슬로우 쿼리 발생을 원인으로 추정하였는데요. 이번 포스팅에서는 AWS CloudWatch로 슬로우 쿼리를 찾아보고 개선하는 과정을 기록해보겠습니다.

 

슬로우 쿼리란?
DBMS가 클라이언트 요청을 받아 응답할 때 시간이 오래 소요되는 쿼리를 지칭합니다. 일반적으로 1초 이상이면 슬로우 쿼리라고 지칭한다고 합니다.

 

AWS CloudWatch 슬로우 쿼리 모니터링 설정

 

저는 데이터 베이스로 Amazon RDS를 사용하는데요, AWS에서 기본적으로 CloudWatch 모니터링을 제공합니다.

DB의 성능과 같은 기본 지표는 바로 볼 수 있지만 슬로우 쿼리 모니터링은 추가적으로 몇 가지 설정이 필요합니다.

1. RDS - 파라미터 그룹에서 파라미터 그룹을 생성합니다.

 

 

 

2. 파라미터 그룹 패밀리에서 사용하는 DB 그룹을 선택한 후 생성합니다.

 

 

3. 파라미터 편집에서 아래 파라미터를 검색해서 값을 편집해줍니다.

  • slow_query_log = 1(기본값 0 또는 로깅 없음)
  • long_query_time = 1(1초 이상 실행된 로그)
  • slow_query_log_file = slow query log를 저장할 경로와 이름(Default 값으로 해도 무방)
  • log_output = FILE

 

 

4. 데이터베이스 - 인스턴스 클릭 - 수정 - 파라미터 그룹을 인스턴스에 적용시킵니다.

 

 

추가 수정에서 로그 내보내기 설정도 해줍니다.

 

 

5. 여기까지 완료되면 DB가 재부팅되고 파라미터 그룹이 적용됩니다.

재부팅이 완료되면 슬로우 쿼리를 날려봅니다.

 

 

workbench 사용

 

 

6. AWS CloudWatch - 로그 그룹 - 로그 스트림에서 선택 - 로그이벤트에서 슬로우 쿼리를 확인할 수 있습니다.

 

 

7. 여기까지 완료되면 슬로우 쿼리 모니터링이 이루어지는 상태이므로 어떤 쿼리가 슬로우 쿼리인지 로그를 살펴봅니다.

 

이전 포스팅에서 설정한 부하 테스트로 요청을 200회 보내보겠습니다.

무수히 많은 슬로우 쿼리들이 기록됩니다. 다음 포스팅에서 SQL 최적화로 슬로우 쿼리를 개선해보겠습니다.