MySQL 슬로우 쿼리 로그 설정

MySQL long query, slow query log
MySQL 슬로우 쿼리 로그 설정
MySQL 느린 쿼리 로그 설정
MySQL 오래 걸리는 쿼리, 롱 쿼리 로그

1 확인

  • MySQL 접속하여 현재 설정 확인
mysql> SHOW VARIABLES LIKE 'slow_query_%';
+---------------------+---------------------------------+
| Variable_name       | Value                           |
+---------------------+---------------------------------+
| slow_query_log      | OFF                             |
| slow_query_log_file | /var/run/mysqld/mysqld-slow.log |
+---------------------+---------------------------------+
2 rows in set (0.00 sec)
→ 슬로우 쿼리 설정 OFF

2 로그 폴더 생성, 퍼미션 조정

[root@zetawiki ~]# mkdir /var/log/mysql
[root@zetawiki ~]# chown mysql:mysql /var/log/mysql
[root@zetawiki ~]# ll /var/log/ | grep mysql
drwxr-xr-x 2 mysql mysql    4096 Aug  3 22:46 mysql
-rw-r----- 1 mysql mysql   53059 Jun 15 02:08 mysqld.log

3 로그 설정

  • my.cnf 파일 편집. [mysqld]의 아래 적당한 곳에 다음 내용 기입
[root@zetawiki ~]# vi /etc/my.cnf
[mysqld]
... (생략)
slow_query_log=1
slow_query_log_file=/var/log/mysql/mysql-slow.log
long_query_time=5
→ [mysqld] 아래에 3줄을 추가한다.
→ slow_query_log = 1(사용), 로그파일 위치는 /var/log/mysql/mysql-slow.log
→ 수행시간이 5초 넘는 쿼리를 수집

4 cnf 파일(예시) 확인

[root@zetawiki ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_allowed_packet=4M
default-storage-engine=InnoDB
slow_query_log=1
slow_query_log_file=/var/log/mysql/mysql-slow.log
long_query_time=5

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

5 MySQL 재시작 (설정 적용)

  • 재시작(restart) 대신 리로드(reload)만 해도 됨
  • 여기서는 그냥 재시작
[root@zetawiki ~]# service mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]
[root@zetawiki ~]# cat /var/log/mysql/mysql-slow.log
/usr/libexec/mysqld, Version: 5.1.73-log (Source distribution). started with:
Tcp port: 0  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
→ 슬로우 로그 파일이 생성됨

6 테스트

3초 이상 걸리는 쿼리를 실행하고 로그 파일을 확인해보자.

[root@zetawiki ~]# mysql -uroot -pP@ssw0rd -e 'SELECT SLEEP(4)'
+----------+
| SLEEP(4) |
+----------+
|        0 |
+----------+
[root@zetawiki ~]# cat /var/log/mysql/log-slow-queries.log
/usr/libexec/mysqld, Version: 5.5.34-log (MySQL Community Server (GPL)). started with:
Tcp port: 0  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
# Time: 140803 23:19:41
# User@Host: root[root] @ localhost []
# Query_time: 4.001873  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1407075581;
SELECT SLEEP(4);
→ 언제(Time) 누가(User) 어디서(Host) 얼마나 긴(Query_time) 쿼리를 수행했는지 알 수 있다.
→ 2014년 8월 3일 23:19:41에, root가 locallhost에서 4.001873초 걸리는 쿼리를 수행함
→ 쿼리 내용은 SELECT SLEEP(4);
→ 실제 상황에서는 테이블을 독차지하고 있었던 시간을 나타내는 Lock_time도 매우 중요하다. (여기서는 데이터 처리가 없는 SLEEP이라 0)

7 같이 보기

8 참고 자료

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}