Computer >> 컴퓨터 >  >> 스마트폰 >> Linux

MySQL 슬로우 쿼리(Slow Query) 로그 설정 방법 완벽 가이드

데이터베이스 성능이 갑자기 느려졌을 때, 원인이 되는 쿼리를 찾는 것은 생각보다 어렵고 시간이 많이 걸리는 작업입니다. 이 가이드에서는 MySQL에서 슬로우 쿼리(Slow Query) 로깅을 설정하는 방법을 소개하여, 어떤 쿼리가 데이터베이스 속도를 저하시키는지 정확하게 파악할 수 있도록 도와드립니다.

왜 슬로우 쿼리 로그가 필요한가?

운영 환경(Production)의 MySQL 서버를 관리하다 보면 가끔 서버가 평소보다 느리게 동작하는 경우가 발생합니다. 문제는 어떤 쿼리가 병목 원인인지 추적하기가 쉽지 않다는 점입니다. 다행히 MySQL에는 느리게 실행되는 쿼리를 별도의 로그 파일에 기록하는 기능이 내장되어 있습니다.

이 기능을 활성화해 두면, 데이터베이스 서버가 평소보다 느려졌을 때 로그 파일을 텍스트 편집기로 열어 어떤 쿼리가 시간을 많이 소모했는지 바로 확인할 수 있습니다.

1단계: MySQL 설정 파일(my.cnf) 수정

먼저 MySQL 서버의 설정 파일인 my.cnf를 엽니다. 리눅스 환경에서는 일반적으로 /etc 디렉터리(예: /etc/my.cnf 또는 /etc/mysql/my.cnf)에 위치합니다.

파일 안에서 log-slow-queries 파라미터가 이미 설정되어 있는지 확인합니다. 설정되어 있지 않다면 아래와 같이 추가합니다:

log-slow-queries = /var/log/mysql/mysql-slow.log

이 설정은 슬로우 쿼리가 기록될 로그 파일의 경로를 지정합니다. 참고로 최신 버전의 MySQL(5.5 이상)에서는 다음과 같은 방식으로 설정하는 것이 권장됩니다:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log

2단계: 슬로우 쿼리 판정 기준 시간 설정

다음으로, 어떤 쿼리를 '느린 쿼리'로 판정할지 기준 시간을 지정해야 합니다. 예를 들어 30초로 설정하려면 아래와 같이 입력합니다:

long_query_time = 30

이 값은 서버 환경에 따라 조절할 수 있습니다. 운영 중인 서비스의 특성상 30초보다 짧은 시간(예: 1~5초)이라도 성능에 영향을 줄 수 있다면 더 낮은 값을 설정하는 것이 좋습니다.

3단계: MySQL 재시작 및 로그 모니터링

설정을 저장한 후 MySQL 서버를 재시작하면 변경 사항이 적용됩니다:

sudo systemctl restart mysql

이후부터는 실행 시간이 long_query_time에서 설정한 시간(예: 30초)을 초과하는 쿼리가 모두 mysql-slow.log 파일에 기록됩니다. 이제 문제가 되는 쿼리를 훨씬 빠르고 간편하게 디버깅할 수 있습니다.

추가 팁: 크론(Cron) 작업으로 자동 알림 받기

로그 파일을 주기적으로 직접 확인하는 것은 번거로울 수 있습니다. 크론(Cron) 작업을 등록하여 며칠에 한 번씩 해당 로그 파일 내용을 이메일로 전송받도록 설정해 두면, 슬로우 쿼리 발생 여부를 놓치지 않고 파악할 수 있습니다.

마무리

슬로우 쿼리 로깅은 MySQL 성능 최적화의 첫걸음입니다. 로그를 꾸준히 분석하면 인덱스 누락, 비효율적인 쿼리 구조 등 성능 저하의 근본 원인을 찾아낼 수 있으며, 결과적으로 데이터베이스와 애플리케이션 전반의 응답 속도를 개선할 수 있습니다.