- MySQL long query, slow query log
- MySQL 슬로우 쿼리 로그 설정
- MySQL 느린 쿼리 로그 설정
- MySQL 오래 걸리는 쿼리, 롱 쿼리 로그
- The slow query log is NOT enabled.
1 확인
- MySQL 접속하여 현재 설정 확인
Console
Copy
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 로그 폴더 생성, 퍼미션 조정
Console
Copy
[root@zetawiki ~]# mkdir /var/log/mysql
[root@zetawiki ~]# chown mysql:mysql /var/log/mysql
Console
Copy
[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]
의 아래 적당한 곳에 다음 내용 기입
Console
Copy
[root@zetawiki ~]# vi /etc/my.cnf
aconf
Copy
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 5
log_slow_rate_limit = 1
log_slow_verbosity = query_plan
log_slow_admin_statements
- → slow_query_log = 1(사용), 로그파일 위치는 /var/log/mysql/mysql-slow.log
- → 수행시간이 5초 넘는 쿼리를 수집
4 cnf 파일(예시) 확인
Console
Copy
[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)만 해도 됨
- 여기서는 그냥 재시작
Console
Copy
[root@zetawiki ~]# service mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
6 확인 2
- 슬로우 로그 파일 생성 확인
Console
Copy
[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
- MySQL 접속하여 환경변수 확인
Console
Copy
mysql> SHOW VARIABLES LIKE 'slow_query_%';
+---------------------+-------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /var/log/mysql/mysql-slow.log |
+---------------------+-------------------------------+
2 rows in set (0.00 sec)
Console
Copy
mysql> SHOW VARIABLES LIKE 'long_query_%';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
1 row in set (0.00 sec)
7 테스트
5초 이상 걸리는 쿼리를 실행하고 로그 파일을 확인해보자.
Console
Copy
mysql> SELECT SLEEP(7);
+----------+
| SLEEP(7) |
+----------+
| 0 |
+----------+
1 row in set (7.00 sec)
Console
Copy
[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
# Time: 160102 20:29:51
# User@Host: root[root] @ localhost []
# Query_time: 7.000300 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1451734191;
SELECT SLEEP(7);
- → 언제(Time) 누가(User) 어디서(Host) 얼마나 긴(Query_time) 쿼리를 수행했는지 알 수 있다.
- → 2016년 1월 2일 20:29:51에, root가 localhost에서 7.000300초 걸리는 쿼리를 수행함
- → 쿼리문은
SELECT SLEEP(7);
- → 실제 상황에서는 테이블 독점시간을 나타내는 Lock_time도 매우 중요하다. (여기서는 데이터 처리가 없는 SLEEP이라 0)
8 같이 보기
- /var/log/mysql/mysql-slow.log
- /var/log/mysqld.log
- /etc/my.cnf
- 함수 sleep
- MySQL
- 리눅스 쉘에서 MySQL 쿼리
- MySQL 일반 쿼리 로그 설정
9 참고
편집자 Jmnote bot Jmnote 125.129.130.129
로그인하시면 댓글을 쓸 수 있습니다.