MySQL에서 Slow Query(슬로우 쿼리) 를 모니터링하는 것은 성능 최적화를 위한 중요한 작업입니다. 다음은 슬로우 쿼리를 모니터링하는 일반적인 방법들입니다:
1. 슬로우 쿼리 로그 활성화하기
슬로우 쿼리를 기록하기 위해 MySQL 설정을 조정합니다.
방법 1: my.cnf 또는 my.ini 파일 수정
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
slow_query_log: 슬로우 쿼리 로그 기능 활성화slow_query_log_file: 로그 파일 위치long_query_time: 몇 초 이상 걸리는 쿼리를 느린 쿼리로 간주할지 설정 (초 단위)log_queries_not_using_indexes: 인덱스를 사용하지 않는 쿼리도 로그에 기록
설정 후 MySQL을 재시작해야 반영됩니다.
방법 2: MySQL 실행 중에 설정 변경
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
SET GLOBAL long_query_time = 1;
SET GLOBAL log_queries_not_using_indexes = 1;
주의: 이 설정은 MySQL 재시작 후 사라질 수 있으므로
my.cnf에도 반영해야 합니다.
2. 슬로우 쿼리 로그 확인
슬로우 쿼리는 설정된 로그 파일에 저장됩니다.
sudo tail -f /var/log/mysql/slow.log
또는 grep, awk 등으로 분석할 수 있습니다.
3. mysqldumpslow를 사용한 분석
MySQL에 포함된 mysqldumpslow 유틸리티로 로그를 요약할 수 있습니다.
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
-s: 정렬 기준 (t는 시간)-t: 상위 N개의 쿼리/var/log/mysql/slow.log: 로그 파일 경로
4. pt-query-digest를 사용한 고급 분석 (Percona Toolkit)
더 정교한 분석을 위해 pt-query-digest 도구를 사용합니다.
pt-query-digest /var/log/mysql/slow.log
이 도구는 다음을 포함한 자세한 통계를 제공합니다:
- 빈도 높은 쿼리
- 총 시간 및 평균 시간
- 쿼리 템플릿
- 사용자 및 호스트 정보
5. Performance Schema를 통한 실시간 모니터링
MySQL 5.6 이상에서는 performance_schema를 통해 실시간 쿼리 모니터링이 가능합니다.
예시:
SELECT * FROM performance_schema.events_statements_summary_by_digest
ORDER BY AVG_TIMER_WAIT DESC
LIMIT 10;
이 방식은 로그 기반 분석보다 실시간 성능 파악에 적합합니다.
6. 모니터링 도구 사용
- MySQL Enterprise Monitor
- Percona Monitoring and Management (PMM)
- Grafana + Prometheus
- Datadog, New Relic 등의 SaaS 기반 APM
이러한 도구들은 시각화, 알림 설정, 대시보드 등을 지원합니다.
요약
| 방법 | 용도 | 장점 |
|---|---|---|
| 슬로우 쿼리 로그 | 기본 분석 | 간단하고 설정이 쉬움 |
mysqldumpslow |
요약 통계 | 설치 불필요 |
pt-query-digest |
상세 분석 | 정밀 분석 가능 |
| Performance Schema | 실시간 모니터링 | 실시간 및 정량 분석 |
| 외부 도구 (PMM 등) | 시각화/모니터링 | 관리 자동화 및 대시보드 |