DB

[MySQL] mysqldumpslow, pt-query-digest로 슬로우 쿼리 분석하기 🔧

인생아 2025. 7. 4. 21:21
반응형

슬로우 쿼리 로그는 수집만으로는 아무 의미가 없다.

어떤 쿼리가 얼마나 자주, 얼마나 느리게 실행됐는지를 분석하는 작업이 핵심

이를 위해 MySQL에서는 기본 제공 도구인 mysqldumpslow, 그리고 성능 진단 전문 도구인 pt-query-digest가 널리 사용된다.
이 두 도구는 실무에서도 매우 자주 활용되는 분석 도구이며, 쿼리 최적화 방향을 빠르게 잡아준다.

🧠 슬로우 쿼리 로그 분석 도구란?

MySQL의 슬로우 쿼리 로그 파일은 로그는 텍스트 기반이라 눈으로 보기엔 너무 방대하고 복잡하다.
이걸 자동으로 정렬, 집계, 빈도수 분류, 시간 평균 등을 요약해주는 도구가 바로 분석 도구다.

  • mysqldumpslow: MySQL 기본 내장 도구, 간단한 분석용
  • pt-query-digest: Percona Toolkit의 고급 분석 도구, 실무 기준
반응형

🛠 mysqldumpslow 사용법 (MySQL 기본 제공 도구)

mysqldumpslow는 슬로우 쿼리 로그를 요약 정리해주는 도구다.
MySQL이 설치된 환경이라면 기본 포함되어 있으며 다음과 같이 실행한다.

mysqldumpslow -s t -t 10 /var/lib/mysql/ubuntu-slow.log

주요 옵션 설명

  • -s : 정렬 기준 (t: 시간, c: 호출 수, l: 잠금 시간, r: rows)
  • -t : 상위 몇 개를 추출할지 지정
  • -g : 특정 키워드로 필터링 (예: SELECT, UPDATE)

예제 1: 가장 느린 쿼리 5개 추출

mysqldumpslow -s t -t 5 /var/lib/mysql/mysql-slow.log

예제 2: 특정 테이블 관련 쿼리만 추출

mysqldumpslow -g "FROM orders" /var/lib/mysql/mysql-slow.log

결과 예시

Count: 3  Time=4.21s (12s)  Lock=0.00s  Rows=1024
SELECT * FROM orders WHERE customer_id = N

→ 이 쿼리가 3번 실행되었고, 평균 4.21초가 걸렸으며 총 12초가 소요됨

mysqldumpslow는 로그 요약이 목적일 뿐, 세부 분류나 그래프 출력 기능은 없다.

그래서 실무에서는 pt-query-digest를 보완용 또는 주 도구로 더 많이 사용

🧰 pt-query-digest 사용법 (고급 분석 도구)

pt-query-digest는 Percona Toolkit에 포함된 명령줄 분석 도구로 슬로우 쿼리 로그를 통계 기반으로 정리하고, 쿼리 템플릿 단위로 그룹핑해준다.
쿼리별 총 호출 수, 평균 시간, rows 수 등 다양한 메트릭을 추출해준다.

설치 방법 (Ubuntu 기준)

sudo apt-get install percona-toolkit

또는 brew 사용 시

brew install percona-toolkit

기본 사용 예시

pt-query-digest /var/lib/mysql/mysql-slow.log

주요 출력 항목

  • Query ID: 해시값 기반으로 쿼리 템플릿 식별
  • Count: 호출 횟수
  • Exec time: 총 실행 시간
  • Rows sent / Examined: 평균 row 수
  • Query abstract: 쿼리 템플릿
  • Full Query Example: 실제 수행된 예시 쿼리

출력 예시 일부

# 3.5s user time, 20ms system time, 25.0M rss, 32.0M vsz
# Profile
# Rank Query ID           Response time Calls R/Call   V/M   Item
# ==== ================== ============= ===== ======== ===== ==========
#    1 0xE4FA0389F1...     12.5024 60.0%   105  0.1191  0.99 SELECT orders

→ orders 테이블 관련 SELECT 쿼리가 105번 호출되었고 총 12.5초를 차지함

반응형

⚙️ 필터링 예시

특정 시간 범위, 특정 사용자, 특정 쿼리 유형만 분석하고 싶을 때 아래처럼 활용 가능

pt-query-digest --filter '$event->{user} =~ m/^admin/ && $event->{Arg} =~ m/^SELECT/' /var/lib/mysql/mysql-slow.log

→ admin 사용자가 실행한 SELECT 쿼리만 분석

🧠 실무 활용 팁

  • pt-query-digest는 분석 결과를 HTML 또는 CSV로 출력할 수 있어 리포트 용도로도 적합
  • 로그가 클 경우 gzip 압축된 상태로도 바로 분석 가능
pt-query-digest mysql-slow.log.gz
  • 분석 결과를 MySQL 테이블에 저장하여 장기 모니터링 시스템 구축도 가능
pt-query-digest --create-review-table --review h=localhost,D=test,t=slow_review --no-report mysql-slow.log

✅ 정리

  • mysqldumpslow는 기본 제공되는 간단한 슬로우 쿼리 로그 요약 도구
  • pt-query-digest는 Percona에서 제공하는 고급 로그 분석 도구로 실무에 강력 추천
  • 두 도구 모두 쿼리 튜닝 방향을 잡는 데 매우 효과적이며, 로그 수집 → 분석 → 개선 사이클의 핵심 역할
  • 로그 수집만 하고 분석하지 않으면 의미 없음. 분석 자동화와 시각화까지 고려해야 진짜 실무용

🔗 공식 문서 참고
mysqldumpslow: https://dev.mysql.com/doc/refman/8.0/en/mysqldumpslow.html
pt-query-digest: https://www.percona.com/doc/percona-toolkit/LATEST/pt-query-digest.html

반응형