본문 바로가기
DB/MySQL

슬로우 쿼리 로그(Slow Query Log)

by oneny 2023. 11. 14.

슬로우 쿼리 로그(Slow Query Log)

슬로우 쿼리 로그는 데이터베이스 시스템에서 실행 속도가 느린 쿼리를 식별하고 기록하는 로그 시스템을 말한다. 슬로우 쿼리 로그는 다음과 같은 상황에서 사용된다.

  • 성능 튜닝: 데이터베이스의 성능을 향상시키기 위해 느린 쿼리를 식별하고 최적화할 때 사용된다.
  • 문제 진단: 어떤 쿼리가 성능 이슈를 일으키는지 파악하여 해결하는데 도움이 된다.
  • 시스템 감지: 데이터베이스 시스템을 지속적으로 감시하여 성능 저하를 미리 감지할 수 있다.

보통 DBMS의 설정에서 이를 활성화하고 관련된 옵션을 구성할 수 있다.

 

설정

slow_query_log 시스템 변수를 통해서 on/off할 수 있고, slow_query_log_file 시스템 변수는 슬로우 쿼리 로그 파일 경로를 나타낸다. long_query_time 시스템 변수를 통해서 기준 시간 등을 설정할 수 있는데 설정한 시간 이상의 시간이 소요된 쿼리가 모두 기록된다. 소수점 값으로 설정하면 마이크로 초 단위로 설정이 가능하다.

 

이러한 시스템 변수는 SET 명령어를 통해서 바꿔줄 수 있는데 만약 MySQL 서버를 재시작하면 윈도우면 my.ini, 리눅스면 my.cnf 설정 파일대로 다시 시스템 변수가 설정되기 때문에 SET PERSIST 명령어를 사용하거나 직접 설정 파일을 바꾼 후 MySQL 서버를 재시작하는 방법이 있다. 자세한 내용은 아래를 참고하자.

 

MySQL 서버 설정과 사용자 및 권한

MySQL 서버 설정 일반적으로 MySQL 서버는 단 하나의 설정 파일을 사용하는데, 리눅스를 포함한 유닉스 계열에서는 my.cnf라는 이름을 사용하고, 윈도우 계열에서는 my.ini라는 이름을 사용한다. MySQL 8

oneny.tistory.com

 

슬로우 쿼리 실행

SELECT SLEEP(20);

20초 지연시키는 쿼리를 실행하면 slow_query_log_file 시스템 변수에 설정된 경로로 파일에 로그가 기록된다. 여기서 주의해야할 점은 슬로우 쿼리 로그는 MySQL이 쿼리를 실행한 후, 실제 소요된 시간을 기준으로 슬로우 쿼리 로그에 기록할지 여부를 판단하기 때문에 반드시 쿼리가 정상적으로 실행이 완료되어야 슬로우 쿼리로그에 기록될 수 있다. 만약 장애나서 급하게 kill session_id; 시킨 쿼리는 슬로우 쿼리 로그에 남지 않는다.

 

또한, log_output 옵션을 이용해서 슬로우 쿼리 로그를 파일로 기록할지 테이블로 기록할지 선택할 수 있는데 TABLE로 설정하면 mysql DB의 테이블(general_log와 slow_log 테이블)에 저장하며, FILE로 설정하면 로그의 내용을 디스크의 파일로 저장한다. 하지만 DB 부하 발생 시 정상적인 쿼리도 처리가 지연되면서 slow query log에 쌓일 수 있기 때문에 이럴 경우 DB 부하가 더 부담을 주는 상황을 볼 것이기 때문에 TABLE에 로그를 쌓을 이유는 없다.

 

로그 내용

슬로우 쿼리에 대한 로그 기록을 다음과 같은 정보가 포함된다.

  • 쿼리 내용: 느린 쿼리의 실제 SQL 문장이나 쿼리의 텍스트
  • 실행 시간: 쿼리가 실행되는 데 걸린 시간
  • 시작 시간: 쿼리가 실행된 정확한 시간
  • 데이터베이스 사용자: 쿼리를 실행한 데이터베이스 사용자의 정보
  • 호스트 정보: 쿼리를 실행한 클라이언트 호스트의 정보
  • 기타 세부 정보: 성능 통계, 실행 계획 등의 기타 정보

 

출처

MySQL - 슬로우 쿼리 로그 설정 (자동으로 느린 쿼리 로그 남기기)

SLOW QUERY 슬로우 쿼리 로그 설정 및 확인방법(MYSQL, MARIADB)

'DB > MySQL' 카테고리의 다른 글

인덱스를 사용하는 이유와 트레이드 오프  (0) 2023.11.28
MySQL 데드락 자동 감지 및 비활성화 시 대응  (1) 2023.11.21
트랜잭션과 잠금  (0) 2023.11.04
MySQL 아키텍처  (1) 2023.10.24