DB) 느리게 가는 놈을 확인한다. Slow Query

백준우·2022년 5월 31일
1

DB

목록 보기
7/8
post-thumbnail

1. Slow Query란?


2. Mysql Slow Query

2.1 적용하기


1. Slow Query란?

프로젝트를 진행하면서 많은 경험과 에러를 만나왔다. 하지만 프로그램의 유지보수성 측면은 TDD와 클래스기반 개발 말고는 딱히 생각나는 부분이 없었다. 이번에 LandingProject를 진행하면서 TDD등 데이터관리뿐 아니라 DB자체에 Query가동 시간을 기록하고 확인할 수 있는 방법인 Slow Query에대해 알게되어 적용해 보았다.

  • DBMS가 Client로 요청을 받아서 Query를 실행할경우 일정시간안에 수행되지 못한 Query를 명칭합니다.
  • 개발자가 작성한 Query가 실제로 지정한 시간보다 오래 걸리는경우를 뜻합니다.
  • Query가 정상적으로 수행되지 못하는 경우가 아닌 Query의 가동시간을 중점으로 보는 기능이다.

2. Mysql Slow Query

2.1 적용하기

  1. Slow Query를 활성화 하기 위해서는 MySQL Configuration 파일을 찾아야 한다. 아래명령어를 사용해서 my.cnf를 수정한다.
$ mysql --verbose --help | grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

이번에 /etc/my.cnf에 작성하니 적용이 되었다. (여러 디렉토리에 있을경우 맨 좌측부터 우선적용된다.)

  1. 파일을 아래와 같이 수정한다.
# 쿼리 최대 수행 시간 설정 (이번엔 테스트를 위해 0.001초로 설정하였다.)
long_query_time = 0.001
# Slow Query활성화 
slow_query_log = 1
# log파일 저장위치 작성
slow_query_log_file = /Users/***/Desktop/slow_query.log //작성자의 바탕화면 위치(log 파일은 따로 생성할 필요 없다.)

Error) 작성할때 [mysqld]를 작성하지 않을 경우 에러가 났다.

TIP) mysql에 직접적으로 명령어를 부여해서 이용할 수 도 있다.

mysql> set global long_query = 3;
mysql> set global slow_query = 1;
mysql> set global slow_query_log_file = '/Users/***/Desktop/slow_query.log'
  1. mysql restart
    myslq을 재시작 해준다.
$mysql.server restart 

이제 쿼리가 0.001초 이상 진행될경우 Desktop에 slow_query.log 파일에 기록이 남게 된다.

2.2 실 사용 모습

  • Time : 쿼리 구동 시간
  • User@Host: 사용자와 작동 Host가 남는다.
  • Query Time: 쿼리 구동 시간
  • Lock_time: 쿼리 락이 걸린 시간
  • Rows_sent: 쿼리 결과 row 갯수
  • Rows_examined: 쿼리 대상 row 갯수

위와 같이 Query를 보여주면서 Query의 구동 시간과 시작 시간이 나타나게 된다.

TIP) MySQL상 확인방법

SHOW VARIABLES WHERE  Variable_Name LIKE 'slow_query_log' OR  
Variable_Name LIKE 'long_query_time' OR Variable_Name LIKE 'log_output';

을 입력하면 적용된 slow query 설정상태를 알 수 있다.


향후 진행방향

  • 실제 프로젝트에 적용을 하여 TDD를 통한 데이터 입출력 테스트 다음으로 Query 시간을 줄여 성능을 높이는 방향도 고려하겠다.

참고

profile
이게 되네?

0개의 댓글