본문 바로가기
IT

[DB /MySQL] slow query란??? / MySQL 에서의 slow query log 활성화와 구성하는 방법

by 무브영/movewoo0 2024. 7. 5.
728x90
반응형

안녕하세요 이번 글에서는 DB에서  Slow Query라는 용어가 무엇인지, MySQL에서  Slow Query Log를 활성화하고 구성하는 방법에 대해 씁니다. 

 


728x90

1. Slow Query 란

"Slow query"는 데이터베이스 시스템에서 다른 쿼리들에 비해서 실행 시간이 오래 걸리는 쿼리를 의미합니다.

이러한 쿼리들은 데이터베이스의 부하를 증가시키거나 성능 저하를 일으킬 수 있으며, 시스템의 전체 응답 속도를 느리게 만들 수 있습니다.

일반적으로 다음과 같은 원인들로 인해 slow query가 발생할 수 있습니다:

  1. 비효율적 쿼리 작성: 잘못 작성된 SQL 쿼리, 불필요한 조인 또는 서브쿼리 등이 원인이 될 수 있습니다.
  2. 인덱스 부재: 테이블에 적절한 인덱스가 없으면 데이터 검색 시간이 길어질 수 있습니다.
  3. 큰 데이터셋: 비교적 매우 큰 데이터셋을 처리할 때는 시간이 더 오래 걸릴 수 있습니다.
  4. 하드웨어 성능 문제: DB를 구동하는 HW의 CPU, 메모리, 디스크 I/O 성능 문제로 인해 쿼리 실행이 느려질 수 있습니다.
  5. 잠금(lock) 경합: 여러 트랜잭션이 동시에 같은 데이터를 액세스하려고 할 때 발생하는 잠금 경합으로 인해 쿼리가 느려질 수 있습니다.
  6. 네트워크 지연: 네트워크 속도 저하로 인해 쿼리 응답 시간이 길어질 수 있습니다.

 


2. Slow Query 를 없애는, 해결하는 방법

보통 데이터베이스 관리 시스템(DBMS)마다 slow query log 같은 기능이 제공됩니다. 

이를 통해서 slow query를 감지하고 분석하는 데 도움을 얻을 수 있고,  어떤 쿼리가 느린지 왜 느린지 파악하고

적절한 조치를 취할 수 있습니다.

 

일단 아래의 항목들을 점검하면서 slow query의 가능성을 낮출 수 있습니다. 

 

 

  • 쿼리 최적화: 쿼리를 더 효율적으로 작성하고, 필요 없는 복잡성을 제거합니다.
  • 인덱스 추가: 자주 조회되는 열에 인덱스를 추가하여 검색 속도를 향상시킵니다.
  • 데이터베이스 구조 조정: 테이블을 분할하거나, 정규화를 통해 데이터베이스 구조를 개선합니다.
  • 하드웨어 업그레이드: 더 좋은 성능의 하드웨어를 사용합니다.
  • 캐싱: 자주 사용되는 데이터를 캐시에 저장하여 데이터베이스 요청을 줄입니다.
  • 데이터베이스 설정 조정: 데이터베이스의 설정을 최적화하여 성능을 향상시킵니다.

 


 

3. MySQL의 Slow query log 기능 활성화, 구성

위에서 말한 것처럼 DBMS들은 slow query를 분석할 수 있는 로그를 제공하는데,

MySQL의 slow query log 기능을 사용하면 실행 시간이 오래 걸리는 쿼리를 기록하여 성능 분석과 최적화를 할 수 있습니다.

 

Slow Query Log 활성화 및 구성

설정 파일 편집:

MySQL 설정 파일 (my.cnf 또는 my.ini)을 편집하여 slow query log를 활성화합니다.

설정 파일의 위치는 OS와 MySQL 설치 방법에 따라 다를 수 있지만 default 위치는 같습니다. 

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 3
log_queries_not_using_indexes = 1

 

 

  • slow_query_log: slow query log를 1로 입력하여 활성화
  • slow_query_log_file: slow query log 파일의 경로를 지정
    • EX): /var/log/mysql/slow-query.log
  • long_query_time: 느린 쿼리로 간주되는 실행 시간을 초 단위로 지정합니다.
    • EX): 3초 이상 걸리는 쿼리를 기록합니다.
  • log_queries_not_using_indexes: 인덱스를 사용하지 않는 쿼리도 기록하려면 1로 설정합니다.

 

MySQL 서버 재시작

설정 파일을 수정 후, MySQL 서버를 재시작하여 변경 사항을 적용

service mysql restart

 

 

재시작없이 설정 변경

만일 재시작하기 어려운 Live 서버라면

MySQL 서버를 재시작하지 않고 런타임에서 slow query log 설정을 변경하는 것도 가능합니다. 

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow-query.log';
SET GLOBAL long_query_time = 3;
SET GLOBAL log_queries_not_using_indexes = 1;

 

Slow Query Log 확인 및 분석

slow query log 파일을 열어 어떤 쿼리가 느리게 실행되고 있는지 기록된 내용을 확인할 수 있습니다. 

/var/log/mysql/slow-query.log

 

 


 


 

본 포스팅의 내용 및 이미지를 무단 전재, 재배포 또는 복사를 금지합니다.

인용 시 출처와 같이 공개해주세요!

도움이 되셨다면 댓글 또는 공감 부탁드립니다!

728x90
반응형

댓글