본문 바로가기

Database

slowquery 분석 방법

목적.

DB에서 발생하는 슬로우쿼리를 찾아내고 개선하여 슬로우쿼리가 발생하는 빈도를 줄여 perfomance를 최적화 시킨다.

 

내가 관리하는 RDS에는 여러 솔루션의 DB가 혼재되어 있다. 슬로우 쿼리 자체를 수집하고 제공하는 것은 매우 쉬운일이나 그 자체를 분석하고 해결하는 일은 공수가 꽤 많이 드는 일이다.

 

그래서 어떻게 하면 보다 가시적이고 쉽게 인지할 수 있게끔 분석을 해서 개발자들에게 전달해 줄까 고민을 많이 했다.

 

분석도구

pt-query-digest : percona toolkit에 포함된 슬로우 쿼리 분석 툴
(https://www.percona.com/downloads/percona-toolkit/LATEST/)

 

제공 프로세스

  • 분석된 로그를 메일로 매주 월요일 오전 각 개발팀 DB 담당자에게 전달 
  • 로그는 2주일치 슬로우 쿼리를 수집
  • cloudwatch를 통해 2주일치 slow쿼리 필터 및 s3로 추출 → s3에서 다운로드 → pt-query-digest로 slow 쿼리 분석(pt-query-digest {slow쿼리파일명} > {output 파일명}) →  분석 -> 분석 결과 엑셀로 정리 각 어플별 담당자에게 전달
    단, s3에서 슬로우 쿼리 원문 다운로드시 원본의 슬로우쿼리와 일부 양식이 달라(time값이 추가되어 있음)서 정규식 검색을 통한 양식을 원본과 통일 시켜야 분석도구가 분석가능함
    (노트패드 검색/변환 -> 정규표현식으로 찾기/변환 2019-07.+000z(실제 년/월별로 값 달라짐) -> null로 바꾸기


분석 방법

- pt-query-digest를 통해 나오는 결과 확인 -> 솔루션별 상위 랭크 5개 씩 수집 -> 상위 랭크 5개 쿼리에 대한 계획 확인(explain 쿼리) -> 해당 결과를 엑셀에 첨부 및 분석 결과 제공

 

처리 확인 프로세스

  • 엑셀양식의 검토 확인 파일과 함께 슬로우 쿼리 로그 분석 파일 제공
  • 수정 가능 여부 및 수정 가능 날짜에 대한 feedback을 개발팀과 협의해가며 쿼리 튜닝이 가능한지 그리고 수정했는지를 확인
  • 엑셀 네이밍과 슬로우쿼리 네이밍을 일치시켜서 버전별 혼선을 방지