강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

SLOW로그파일을 활용한 지정된 시간이상 질의를 계속하는 질의문 잡아내기(slowquery)

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

SLOW로그파일을 활용한 지정된 시간이상 질의를 계속하는 질의문 잡아내기(slowquery)

 

 

 

 

 

이번에 설명드릴 MYSQL의 로그파일은 MYSQL 질의속도에 대해 튜닝하기 위한 결정적인 단서를 잡을 수 있는 아주 훌륭한 방법이 될 수 있다.

 

 

 

 

  MYSQL의 질의에 대한 응답속도가 현저하게 떨어지거나 MYSQL 데이터베이스와 연동되는 특정 웹프로그램이 시스템자원을 현저하게 많이 차지하는 등의 문제가 발생하였다면 이번 예에서 설명드리는 SLOW로그에서 어떤 웹프로그램이 문제인가를 파악해보기 바란다.

 

 

 

 

 

 

SLOW로그란 MYSQL의 환경변수인 “long_query_time”의 설정시간(초단위) 이상의 쿼리시간을 가지는 특정SQL 쿼리문에 대한 로그만을 기록하는 로그파일이다.

 

 

 

 

 

 

따라서 SLOW로그파일을 활용한다면 어떤 웹프로그램이 쿼리시간(실행시간)을 많이 차지하는가를 확인 할 수 있다.

 

 

 

 

   어느날 갑자기 MYSQL의 응답속도가 현저하게 떨어진다면 SLOW로그로 쿼리응답속도가 일정시간 이상 지속되는 쿼리문을 찾아서 조치하면 될 것이다.

 

 

 

 

 

 

SLOW쿼리옵션형식 :  --log-slow-queries=슬로우쿼리파일명

 

아래는 이와 같은 MYSQL SLOW로그파일의 활용에 대한 설명이다.

 

 

 

 

 

 

먼저, /usr/local/mysql/bin/디렉토리에서 “mysqld_safe”으로 MYSQL을 실행시킬 때에  “--log-slow-queries=”옵션을 사용하여 SLOW쿼리로그를 기록하도록 지정하였다.

 

 

 

 

 

 

[root@sulinux data]#/usr/local/mysql/bin/mysqld_safe --log-slow-queries=SLOW_QUERY_LOG &

[1] 4228

[root@sulinux data]#090429 02:26:46 mysqld_safe Logging to '/usr/local/mysql/data/sulinux.net.err'.

090429 02:26:46 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data

 

[root@sulinux data]#

 

즉 위의 예에서 SLOW로그파일명으로 SLOW_QUERY_LOG라고 지정하였기 때문에 /usr/local/mysql/data/디렉토리에는 SLOW_QUERY_LOG라는 파일명이 생성되어 SLOW쿼리로그를 기록할 것이다.

 

 

 

 

 

 

다음은 /usr/local/mysql/data/디렉토리는 위의 예에서 지정한 SLOW쿼리로그를 확인한 것이다.

 

 

 

 

 

 

[root@sulinux data]#ls -l /usr/local/mysql/data/SLOW_QUERY_LOG

-rw-rw---- 1 mysql mysql 179  4 29 02:26 /usr/local/mysql/data/SLOW_QUERY_LOG

[root@sulinux data]#

 

 

 

 

그리고 위의 “SLOW_QUERY_LOG”파일에는 MYSQL의 환경변수 “long_query_time”에 초단위로 지정된 시간보다 초과하는 쿼리문만을 기록한다.

 

 

 

 

 아래는 MYSQL의 환경변수 “long_query_time”의 값을 확인하는 방법을 나타낸 것이다.

 

 

 

 

 mysqladmin이라는 MYSQL유틸리티를 이용하여 MYSQL의 환경변수들을 모두 출력하여 grep으로 “long_query_time”에 대한 부분만을 확인한 것이다.

 

 

 

 

 

 

[root@sulinux bin]#./mysqladmin -u root -p variables | grep long_query_time

Enter password: ********

| long_query_time                 | 10.000000                              |

[root@sulinux data]#

 

 

 

 

위의 결과를 보면 “long_query_time”의 변수값이 10()로 설정되어있기 때문에 MYSQL SQL쿼리문이 10초이상 지속될 때에는 그 쿼리문의 내역을 /usr/local/mysql/data/디렉토리에 있는 SLOW_QUERY_LOG파일에 기록할 것이다.

 

 

 

 

  따라서 이 로그파일을 확인해본다면 MYSQL의 과부하를 일으키는 웹프로그램파일(SQL쿼리문)을 찾을 수 있을 것이다.

 

 

 

 

 

 

물론 long_query_time에서 지정한 10초라는 시간은 얼마든지 변경이 가능하다.

 

 

 

 

 MYSQL을 실행할 때에 -O옵션을 이용하는 방법이 있고 my.cnf를 이용하는 방법도 있다.

 

 

 

 

 이 방법에 대해서는 이번장의 뒷부분에 자세히 설명하였다.

 

 

 

 

  참고하기 바란다.

 

 

 

 

 

 

결론적으로 이 SLOW로그파일을 활용하면 어떤 쿼리문에서 MYSQL 과부하를 일으키는지 정확하게 알 수 있기 때문에 필자의 경우에 MYSQL 튜닝방법으로 굉장히 애용하는 방법이다.

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,157 명
  • 현재 강좌수 :  36,515 개
  • 현재 접속자 :  219 명