"MySQL 슬로우 쿼리 로그 설정"의 두 판 사이의 차이

 
(사용자 3명의 중간 판 47개는 보이지 않습니다)
1번째 줄: 1번째 줄:
;MySQL long query, slow query log
;MySQL 슬로우 쿼리 로그 설정
;MySQL 슬로우 쿼리 로그 설정
;MySQL 느린 쿼리 로그 설정
;MySQL 느린 쿼리 로그 설정
;MySQL 오래 걸리는 쿼리, 롱 쿼리 로그
;The slow query log is NOT enabled.


==방법==
==확인==
<source lang='bash'>
* MySQL 접속하여 현재 설정 확인
vi /etc/my.cnf
<syntaxhighlight lang='console'>
</source>
mysql> SHOW VARIABLES LIKE 'slow_query_%';
<source lang='autoconf'>
+---------------------+---------------------------------+
[mysqld]
| Variable_name      | Value                          |
log-slow-queries = 로그파일명
+---------------------+---------------------------------+
long_query_time = 시간(초)
| slow_query_log      | OFF                            |
</source>
| slow_query_log_file | /var/run/mysqld/mysqld-slow.log |
:→ [mysqld] 아래에 2줄을 추가한다.
+---------------------+---------------------------------+
 
2 rows in set (0.00 sec)
==실습==
</syntaxhighlight>
;현재 설정 확인
:→ 슬로우 쿼리 설정 OFF
<source lang='dos'>
[root@jmnote ~]# 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


[mysqld_safe]
==로그 폴더 생성, 퍼미션 조정==
log-error=/var/log/mysqld.log
<syntaxhighlight lang='console'>
pid-file=/var/run/mysqld/mysqld.pid
[root@zetawiki ~]# mkdir /var/log/mysql
</source>
[root@zetawiki ~]# chown mysql:mysql /var/log/mysql
:→ 슬로우 쿼리 설정 없음 확인
</syntaxhighlight>
 
<syntaxhighlight lang='console'>
;로그 폴더 생성
[root@zetawiki ~]# ll /var/log/ | grep mysql
<source lang='dos'>
[root@jmnote ~]# mkdir /var/log/mysql
[root@jmnote ~]# chown mysql:mysql /var/log/mysql
</source>
<source lang='dos'>
[root@jmnote ~]# ll /var/log/ | grep mysql
drwxr-xr-x 2 mysql mysql    4096 Aug  3 22:46 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
-rw-r----- 1 mysql mysql  53059 Jun 15 02:08 mysqld.log
</source>
</syntaxhighlight>


;로그 설정
==로그 설정==
<source lang='dos'>
* [[my.cnf]] 파일 편집. <code>[mysqld]</code>의 아래 적당한 곳에 다음 내용 기입
[root@jmnote ~]# vi /etc/my.cnf
<syntaxhighlight lang='console'>
</source>
[root@zetawiki ~]# vi /etc/my.cnf
[mysqld]의 아래 적당한 곳에 다음 내용 기입
[root@zetawiki ~]# vi /etc/mysql/mariadb.conf.d/50-server.cnf  # Ubuntu에 MariaDB 설치시
<source lang='autoconf'>
</syntaxhighlight>
long_query_time=3
<syntaxhighlight lang='aconf'>
log-slow-queries=/var/log/mysql/log-slow-queries.log
[mysqld]
</source>
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_slow_rate_limit = 1
log_slow_verbosity = query_plan
log_slow_admin_statements
</syntaxhighlight>
:→ slow_query_log = 1(사용), 로그파일 위치는 /var/log/mysql/mysql-slow.log
:→ long_query_time = 2 (수행시간이 2초 넘는 쿼리를 수집)


;설정 확인
== cnf 파일(예시) 확인==
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@jmnote ~]# cat /etc/my.cnf
[root@zetawiki ~]# cat /etc/my.cnf
[mysqld]
[mysqld]
datadir=/var/lib/mysql
datadir=/var/lib/mysql
62번째 줄: 58번째 줄:
symbolic-links=0
symbolic-links=0
max_allowed_packet=4M
max_allowed_packet=4M
long_query_time=3
default-storage-engine=InnoDB
log-slow-queries=/var/log/mysql/log-slow-queries.log
slow_query_log=1
slow_query_log_file=/var/log/mysql/mysql-slow.log
long_query_time=5


[mysqld_safe]
[mysqld_safe]
log-error=/var/log/mysqld.log
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
pid-file=/var/run/mysqld/mysqld.pid
</source>
</syntaxhighlight>


;MySQL 재시작 (설정 적용)
==MySQL 재시작 (설정 적용)==
<source lang='dos'>
* 재시작(restart) 대신 리로드(reload)만 해도 됨
[root@jmnote ~]# service mysqld restart
* 여기서는 그냥 재시작
<syntaxhighlight lang='console'>
[root@zetawiki ~]# service mysqld restart
Stopping mysqld:                                          [  OK  ]
Stopping mysqld:                                          [  OK  ]
Starting mysqld:                                          [  OK  ]
Starting mysqld:                                          [  OK  ]
</source>
</syntaxhighlight>
 
==확인 2==
* 슬로우 로그 파일 생성 확인
<syntaxhighlight lang='console'>
[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
</syntaxhighlight>
* MySQL 접속하여 환경변수 확인
<syntaxhighlight lang='console'>
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)
</syntaxhighlight>
<syntaxhighlight lang='console'>
mysql> SHOW VARIABLES LIKE 'long_query_%';
+-----------------+----------+
| Variable_name  | Value    |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
1 row in set (0.00 sec)
</syntaxhighlight>


==테스트==
==테스트==
<source lang='dos'>
5초 이상 걸리는 쿼리를 실행하고 로그 파일을 확인해보자.
[root@jmnote ~]# mysql -uroot -pP@ssw0rd
<syntaxhighlight lang='console'>
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> SELECT SLEEP(7);
Your MySQL connection id is 95
+----------+
Server version: 5.5.34-log MySQL Community Server (GPL)
| SLEEP(7) |
 
+----------+
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|       0 |
 
+----------+
Oracle is a registered trademark of Oracle Corporation and/or its
1 row in set (7.00 sec)
affiliates. Other names may be trademarks of their respective
</syntaxhighlight>
owners.
<syntaxhighlight lang='console'>
 
[root@zetawiki ~]# cat /var/log/mysql/mysql-slow.log
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
/usr/libexec/mysqld, Version: 5.1.73-log (Source distribution). started with:
</source>
Tcp port: 0  Unix socket: /var/lib/mysql/mysql.sock
<source lang='dos'>
Time                Id Command    Argument
mysql> use mysql;
# Time: 160102 20:29:51
Reading table information for completion of table and column names
# User@Host: root[root] @ localhost []
You can turn off this feature to get a quicker startup with -A
# Query_time: 7.000300  Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
 
SET timestamp=1451734191;
Database changed
SELECT SLEEP(7);
</source>
</syntaxhighlight>
<source lang='dos'>
:→ 언제(Time) 누가(User) 어디서(Host) 얼마나 긴(Query_time) 쿼리를 수행했는지 알 수 있다.
mysql> SELECT COUNT(DISTINCT a.name) FROM help_topic a, help_topic b;
:→ 2016년 1월 2일 20:29:51에, root가 localhost에서 7.000300초 걸리는 쿼리를 수행함
+------------------------+
:→ 쿼리문은 <code>SELECT SLEEP(7);</code>
| COUNT(DISTINCT a.name) |
:→ 실제 상황에서는 테이블 독점시간을 나타내는 Lock_time도 매우 중요하다. (여기서는 데이터 처리가 없는 SLEEP이라 0)
+------------------------+
|                   511 |
+------------------------+
1 row in set (4.91 sec)
</source>
<source lang='dos'>
mysql> SELECT COUNT(DISTINCT a.name) FROM help_topic a, help_topic b;
+------------------------+
| COUNT(DISTINCT a.name) |
+------------------------+
|                    511 |
+------------------------+
1 row in set (4.60 sec)
</source>
<source lang='dos'>
mysql> Ctrl-C -- exit!
Aborted
</source>
:→ {{키|Ctrl|C}} 눌러 종료


==같이 보기==
==같이 보기==
*[[/var/log/mysql/mysql-slow.log]]
*[[/var/log/mysqld.log]]
*[[/etc/my.cnf]]
*[[/etc/my.cnf]]
*[[함수 sleep]]
*[[MySQL]]
*[[리눅스 쉘에서 MySQL 쿼리]]
*[[MySQL 일반 쿼리 로그 설정]]


==참고 자료==
==참고==
*http://faq.hostway.co.kr/Linux_DB/1325
*http://faq.hostway.co.kr/Linux_DB/1325
*http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html


[[분류: MySQL]]
[[분류: MySQL]]

2023년 3월 8일 (수) 12:31 기준 최신판

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

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
[root@zetawiki ~]# vi /etc/mysql/mariadb.conf.d/50-server.cnf  # Ubuntu에 MariaDB 설치시
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_slow_rate_limit = 1
log_slow_verbosity = query_plan
log_slow_admin_statements
→ slow_query_log = 1(사용), 로그파일 위치는 /var/log/mysql/mysql-slow.log
→ long_query_time = 2 (수행시간이 2초 넘는 쿼리를 수집)

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  ]

6 확인 2[ | ]

  • 슬로우 로그 파일 생성 확인
[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 접속하여 환경변수 확인
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)
mysql> SHOW VARIABLES LIKE 'long_query_%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

7 테스트[ | ]

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

mysql> SELECT SLEEP(7);
+----------+
| SLEEP(7) |
+----------+
|        0 |
+----------+
1 row in set (7.00 sec)
[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 같이 보기[ | ]

9 참고[ | ]

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