show variables like 'slow_query%';
+---------------------+-------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------+
| slow_query_log | ON |
| slow_query_log_file | mariadb-setting-test-slow.log |
+---------------------+-------------------------------+
현재 Slow Query Log에 대한 설정을 본다.
설정 해준 적도 없는데 켜져 있는거 보니 디폴트 설정인 것 같다.
# MariaDB Slow Log Location
slow_query_log = off
long_query_time = 10
slow_query_log_file = /var/lib/mysql/query_log/slow/db_slow.log
my.cnf 파일에 slow_log 설정을 추가 한다.
service mariadb restart
my.cnf 수정사항을 반영한다.
MariaDB [(none)]> show variables like 'slow_query%';
+---------------------+-------------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/query_log/slow/db_slow.log |
+---------------------+-------------------------------------------+
slow log 파일 위치 변경 된 것을 확인 한다.
cd /var/lib/mysql/
mkdir query_log # 쿼리 로그 폴더 생성
chown mysql:mysql /var/lib/mysql/query_log # query_log 폴더 소유자, 그룹 mysql 변경
이 위에는 general_log 설정을 했다면 할 필요가 없다.
mkdir /var/lib/mysql/query_log/slow # slow 로그 저장 폴더 생성
chown mysql:mysql /var/lib/mysql/query_log/slow # slow 폴더 소유자, 그룹 mysql 변경
touch /var/lib/mysql/query_log/slow/db_slow.log # slow 로그 저장 파일 생성
chown mysql:mysql /var/lib/mysql/query_log/slow/db_slow.log # slow 로그 파일 소유자, 그룹 mysql 변경
로그 파일 저장 폴더와 파일 생성 과정이고 소유자와 그룹을 mysql 로 변경하여 마리아 디비가 접근 읽기, 쓰기 가능하게 만들어준다.
service mariadb restart
my.cnf 수정사항을 반영한다.
일단 OFF 상태인 slow_query_log를 ON 상태로 변경 해준다.
마리아 데이터베이스 재시작 까지 한다.
show variables like 'slow_query%';
+---------------------+-------------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/query_log/slow/db_slow.log |
+---------------------+-------------------------------------------+
slow_query_log가 ON 상태인 것을 확인
SELECT sleep(10), 'sleep query';
현재 slow query를 잡아내는 시간을 10초로 설정을 해놨다.
10초 동안 동작하는 쿼리를 실행 해본다.
SELECT sleep(10), 'sleep query';
+-----------+-------------+
| sleep(10) | sleep query |
+-----------+-------------+
| 0 | sleep query |
+-----------+-------------+
1 row in set (10.00 sec)
10초 쿼리가 정상적으로 실행 된 것을 확인 했다.
이제 slow log를 확인 해보자
cat db_slow.log
/usr/sbin/mysqld, Version: 10.2.43-MariaDB (MariaDB Server). started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
/usr/sbin/mysqld, Version: 10.2.43-MariaDB-log (MariaDB Server). started with:
Tcp port: 0 Unix socket: (null)
Time Id Command Argument
# Time: 230914 14:07:35
# User@Host: root[root] @ localhost []
# Thread_id: 8 Schema: QC_hit: No
# Query_time: 10.000382 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
# Rows_affected: 0
SET timestamp=1694668055;
SELECT sleep(10), 'sleep query'; -- 15번째 줄
15번째 줄에 위에서 실행한 쿼리가 남아있는 것을 확인할 수 있다.
부가적인 다른 정보도 볼 수 있다.