|

MariaDB: Slow Query Log 설정

공정위 광고 문구 Ver 2.0

MariaDB에서 Slow Query Log 설정을 할 경우 Mariadb 10.2 버전부터 etc/my.cnf.d/ 폴더안에 mysql-clients.cnf 및 server.cnf 파일로 나뉘게 되었습니다. mysql 이라도 폴더를 확인한 후에 설정 내역에 따라 확인하면 되겠습니다.

먼저 etc/my.cnf.d/server.cnf 파일에 적용하는 방법에 대해 알아 보겠습니다.

 Slow Query
Slow Query는 수행하는 데 오랜 시간이 걸리는 쿼리입니다. 응답 시간이 길어질 경우 서비스의 품질이 저하되기 때문에 Slow Query Log를 설정해서 지속적인 모니터링을 통해 개선이 필요한 사항 중 하나입니다.

✅ Slow Query Log 설정하기

vi /etc/my.cnf.d/server.cnf

# This group is read by both MariaDB and MySQL servers
[mariadb]    ## [mariadb] 설정 아래가 아닐 경우 에러 발생이 됩니다.
[mysqld]  ## 설정 아래가 아닐 경우 에러 발생이 됩니다.
slow_query_log=1  ## 1은 ON 0은 OFF 
## 슬로우 쿼리 로그의 경로 설정 후 임의 IP 주소로 이름 설정되거나 파일명 같이 생성
slow_query_log_file=/var/lib/mysql/mariadb-slow.log
long_query_time=1  ## 1초를 초과하는 쿼리에 대해 기록 한다는 것 | 테스트를 위해 0.001 초 등으로 설정이 가능.
log_slow_rate_limit=5  ## 슬로우 쿼리 최대 실행 시간 설정
:wq

ll /var/lib/mysql/
-rw-rw----. 1 mysql mysql    425984 Feb 13 15:10 aria_log.00000001
-rw-rw----. 1 mysql mysql        52 Feb 13 15:10 aria_log_control
-rw-rw----  1 mysql mysql         9 Feb 13 15:10 ddl_recovery.log
-rw-rw----  1 mysql mysql       790 Feb 13 15:10 ib_buffer_pool
--- 생략 ---
-rw-rw----  1 mysql mysql       286 Feb 13 15:10 ip-172-31-11-71-slow.log
--- 생략 ---

vi ip-172-31-11-71-slow.log

ip-172-31-11-71-slow.log(서버 IP) 파일로 Slow Query Log를 열어서 확인할 수 있습니다.

✅쿼리 로그 만들기(테스트 위한)


MariaDB [(none)]> select sleep(60);
+-----------+
| sleep(60) |
+-----------+
|         0 |
+-----------+
1 row in set (1 min 0.000 sec)

설정 내역 확인

MariaDB [(none)]> show variables like 'slow_query_%';
+---------------------+-------------------------------+
| Variable_name       | Value                         |
+---------------------+-------------------------------+
| slow_query_log      | ON                            |
| slow_query_log_file | /var/lib/mysql/slow-query.log |
+---------------------+-------------------------------+
2 rows in set (0.001 sec)

✅ Slow Query Log 확인하기

use iamroot;
select max(wr_comment) as max_comment from g4_write_ja
                  where wr_parent = '92' and wr_is_comment = 1;
# Time: 120809 16:08:15
# User@Host: iamroot[iamroot] @  []
# Query_time: 253  Lock_time: 0  Rows_sent: 1  Rows_examined: 419562
select max(wr_comment) as max_comment from g4_write_ja
                  where wr_parent = '92' and wr_is_comment = 1;
# Time: 120809 16:08:17
# User@Host: iamroot[iamroot] @  []
# Query_time: 94  Lock_time: 0  Rows_sent: 0  Rows_examined: 640675
use iamroot;
SELECT count(*) from comment where boardcode=1045552594 and boardidx=274;
# Time: 120809 16:08:23
# User@Host: iamroot[iamroot] @  []
# Query_time: 183  Lock_time: 0  Rows_sent: 1  Rows_examined: 268576

-------------------------------------------------------------------------------------------------
로그 내용 중 각 항목에 대한 설명은 아래와 같습니다.

# Query_time: 2.906063  Lock_time: 0.000026  Rows_sent: 0  Rows_examined: 133323
Query_time : 쿼리 수행시간 
Lock_time : 테이블 LOCK 이 걸린시간
Row_sent : 쿼리 처리 결과 ROW 수
Rows_examined : 쿼리 처리 대상의 ROW 갯수 

✅ Slow Query 빠르게 중단 시키기

슬로우 쿼리로 인해 Load Average가 올라갈 경우 먼저 ps -ef 명령어로 DB 관련 PID를 kill 시킨 후 슬로우 쿼리를 점검 해 보면 되겠습니다.

mysql> SHOW PROCESSLIST;
+----+--------+--------------+---------+---------+------+-------+-------------
| Id | User   | Host         | db      | Command | Time | State | Info        
+----+--------+--------------+---------+---------+------+-------+-------------
|  5 | root   | localhost    | STARPL3 | Query   | 2048 | init  | INSERT INTO
| 13 | root   | localhost    | NULL    | Query   |    0 | NULL  | show processlist
| 14 | lapoly | Canopus:3750 | STARPL3 | Sleep   |  160 |       | NULL        
| 15 | lapoly | Canopus:3751 | NULL    | Sleep   |  386 |       | NULL        
+----+--------+--------------+---------+---------+------+-------+-------------

mysql> KILL 5
마리아디비(MariaDB) 로고

Similar Posts

  • 리눅스 Load Average란?

    리눅스에서 top 명령어 또는 uptime 명령어로 1분, 5분, 15분의 시스템의 평균 로드 지표인 Load Average를 통해 평균 부하 정도를 알 수 있습니다. Load Average는 CPU에 어느 정도의 일이 쌓이는지를 나타내는 것으로 정의 내릴 수 있습니다. ✅ 리눅스 Load Average의 이해 세 개의 숫자 (2.03, 20.17, 15.09)는 시스템에서의 1분,5분,15분 동안의 평균 부하를 나타 냅니다….

  • 오라클 데이터베이스(Oracle Database)

    오라클 데이터베이스 오라클 데이터베이스(Oracle Database 또는 Oracle RDBMS)는 미국 오라클(Oracle) 사의 관계형 데이터베이스 관리 시스템(relational database management system, RDBMS)입니다. Windows Server, Unix 및 다양한 GNU/Linux 배포판을 포함한 운영 체제의 다양한 하드웨어에서 실행될 수 있습니다. Oracle Database에는 다른 플랫폼의 애플리케이션이 Oracle Database와 원활하게 통신할 수 있도록 하는 네트워킹 스택이 있습니다. 예를 들어 Windows에서 실행되는 애플리케이션은 Unix에서…

  • [DBMS] MySQL, MariaDB 데이터베이스 &유저 생성

    MariaDB 데이터베이스 생성 및 삭제, 이름 변경 방법 그리고 유저 생성과 삭제에 대해 간단히 알아 보겠습니다. MariaDB 데이터베이스 생성과 삭제 먼저 데이터베이스 목록을 조회합니다. 데이터베이스 생성 test01로 데이터베이스를 생성합니다. 데이터베이스 삭제 데이터베이스 이름 변경 test01 데이터베이스를 test02로 변경하고 싶은 경우 test02 데이터베이스를 먼저 생성해야 합니다. 먼저 mysqldump로 test01 백업 파일을 생성합니다. test02로 복원합니다….

  • APM 설치 후 ‘사이트에 연결할 수 없음’

    오라클 클라우드 무료 인스턴스 ‘록키 리눅스’에 APM을 설치하고 난 후에 ‘사이트에 연결할 수 없음‘ 에러와 함께 ‘ERR_INVALID_RESPONSE’ 잘못 된 응답이라는 에러 메시지 화면을 확인했다. 도메인까지 연결한 후에 ping으로 해당 IP까지 향하는 것까지 확인했지만 오류가 확인된다. 사이트에 연결할 수 없음: IP 체크 도메인 주소로 오류가 뜨는 것을 확인해서 IP로 접속을 시도했다. 뜨는 화면이 조금…

  • |

    오라클 클라우드 ping 오류[VM 인스턴스]

    오라클 클라우드 VM 인스턴스에서 고정 IP 설정까지 진행했지만 ping을 입력해도 요청 시간 만료로 timeout 오류가 되면서 응답이 없는 오류가 계속 발생했습니다. 오라클 클라우드 ping 오류를 해결하는 방법은 다음과 같습니다. 오라클 클라우드 ping 오류 해결하기 방화벽 설정에서 VCN 설정을 진행해 줘야 하는 것으로 확인 되었습니다. [네트워킹] > [가상 클라우드 네트워크]로 접속합니다. ▼ 생성했던 VCN의…

  • SQL: 테이블 구조, 쿼리(Query), 저장 프로시저(3가지 분류)

    ✅ SQL이란? SQL(Structured Query Language)은 구조화된 질의 언어의 뜻을 가지고 있습니다. 구조적 쿼리 언어(SQL)는 관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어입니다. 관계형 데이터베이스는 정보를 표 형식으로 저장하며, 행과 열은 다양한 데이터 속성과 데이터 값 간의 다양한 관계를 나타냅니다. ✅ SQL 시스템의 구성 요소 SQL 시스템은 테이블, 쿼리, 저장 프로시저 3가지로 분류할 수…

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Prove your humanity: 4   +   8   =