MySQL에서 수행되는 쿼리들 중에서 Elapsed Time이 설정 한 시간 이상 되는 쿼리를 Log 파일로 저장하는 방법이다.
1. 현재 설정 값 확인
mysql> show variables like 'slow%' ; +---------------------+--------------------------------+ | Variable_name | Value | +---------------------+--------------------------------+ | slow_launch_time | 2 | | slow_query_log | OFF | | slow_query_log_file | /var/lib/mysql/mmysql-slow.log | +---------------------+--------------------------------+ |
2. 파라미터 수정
/etc/my.cnf 파일의 [mysqld] 밑에 다음과 같이 파라미터 설정.
Log 경로를 다른 곳으로 하고자 한다면 디렉토리를 만들고 slow_query_log_file 파라미터 값을 지정해 준다.
[root@mmysql ~]# vi /etc/my.cnf # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld] # 생략...
#SlowQuery slow_query_log=1 #slow_query_log_file=/tmp/slow.log <-- 1최 이상 되는 SQL 로깅 long_query_time=1
... 생략 |
3. 파라미터 적용
파라미터 적용은 reload 또는 restart
[root@mmysql ~]# service mysqld restart Stopping mysqld: [ OK ] Starting mysqld: [ OK ]
[root@mmysql ~]# mysql mysql> show variables like 'slow%' ; +---------------------+--------------------------------+ | Variable_name | Value | +---------------------+--------------------------------+ | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /var/lib/mysql/mmysql-slow.log | +---------------------+--------------------------------+ 3 rows in set (0.00 sec) mysql> show variables like 'long_query%' ; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 1.000000 | +-----------------+----------+ |
4. 테스트
실제 Slow Query가 로그파일에 기록 되는지 테스트를 통하여 확인
mysql> select sleep(3) ; +----------+ | sleep(3) | +----------+ | 0 | +----------+ 1 row in set (3.00 sec)
|
[root@mmysql log]# tail -f /var/lib/mysql/mmysql-slow.log
# Time: 2016-08-10T08:39:22.737497Z # User@Host: root[root] @ localhost [] Id: 52 # Query_time: 3.004938 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 use tpch; SET timestamp=1470818362; select sleep(3); |