Slow Query

유영·2023년 4월 20일
0

MYSQL

목록 보기
16/20
post-thumbnail

MySQL 부하체크 -Slow Query(슬로우쿼리)

Time = 쿼리요청시각
Query_time = 쿼리 수행 시간
Lock_time = 락이 걸린 시간
Rows_sent = 쿼리 결과 row 수
Rows_examined = 쿼리 대상 row 수
Uptime : MySQL server 시삭된 후 현재 시간 (초 단위)
Threads : 현제 DB 서버에 연결된 유저수
Questions : 서버 시작후 지금까지 요청된 쿼리수
Slow queries : mysql 설정파일에 슬로우쿼리의 쿼리시간 이상을 가진 요청수
Opens : 서버가 시작된 후 현재까지 열렸던 테이블수
Open tables : 현재 열려 잇는 테이블 수
Queries per second avg : 평균 초단 쿼리수

slow query는 무엇인가요?

DBMS 가 client로부터 요청받은 query를 수행할 때 일정 시간 이상 수행되지 못한 query입니다.
즉 길어야 1~2초 걸리는 db 쿼리가 예상보다 오래 걸리는 경우를 뜻합니다.
언제든지 값이 정상적이지 않을거라는 예외상황이 발생이 되니 로그를 잘 대고 확인하시면 됩니다.

로그 쌓는 방법
mysql의 경우에 슬로 쿼리는 my.cnf 파일 내에서 설정합니다.
my.cnf의 경로는 주로 /etc/my.cnf를 사용합니다. 편집기를 통해 다음의 내용을 입력합니다.
my.cnf로 수정할 경우 mysql 서비스 재시작이 필요합니다.

항목my.cnf 추가내용
해당 값(초) 이상의 로그 기록long_query_time = 3
슬로우쿼리 활성 여부(0 = 비활성 / 1=활성)slow_query_log = 1
슬로우쿼리 로그파일 경로slow_query_log_file = /var/log/mysql/slow_queries.log
index를 사용하지 않는 쿼리 기록 여부log_queries_not_using_indexes = on

이렇게 항목을 추가하시거나 혹은 아래의 명령어를 통해 서비스 재시작을 하지 않고 적용이 가능합니다.

항목mysql실행 명령어
해당 값(초) 이상의 로그 기록mysql>set global long_query_time = 3;
슬로우쿼리 활성 여부(0 = 비활성 / 1=활성)mysql>set global slow_query_log = 1;
슬로우쿼리 로그파일 경로mysql> set global slow_query_log_file="var/log/myslq/slow_queries.log"
index를 사용하지 않는 쿼리 기록 여부mysql>set global log_queries_not_using_indexes=on;
  • MYSQL slow query란 사용자(client)로 부터 요청받은 query 수행시간이 설정한 시간보다 오래 걸릴때 해당 쿼리에 대하여 생성되는 로그입니다.

  • 로그는 query, slow query 발생 시간, query 수행 시간, 쿼리를 요청한 User 및 host 가 남겨집니다.
    아래 테스트 환경은 아래와 같으며 서비스 구성 환경에 따라 명령어가 상이할 수 있습니다.

  • mysql 설치 경로 : /opt/mysql

  • my.cnf 파일 경로 : /etc/my.cnf


[slow query 설정 여부 확인하기]

  1. localhost에서(root 계정으로 서버 ssh 접속) mysql root 계정으로 접속
  • localhost에서 mysql 로그인
  • 실행 명령어 : /opt/mysql/bin/mysql -u root -p
  1. mysql root 계정으로 mysql 접속후 아래 쿼리 실행하여 설정 여부 확인
  • 실행 쿼리 : show variables like "%slow_query%";
  • slow_query_log : 슬로우 쿼리 설정 여부( ON : 활성 / OFF : 비활성 )
  • slow_query_log_file : 슬로우 쿼리 로그 파일 경로

[slow query 설정하기]
mysql slow query 설정이 안되어 있다면 아래 방법으로 slow query 활성할 수 있습니다.

  1. my.cnf 설정 파일에 아래 옵션값 추가
    slow_query_log=1 ( 1: 활성 / 0: 비활성 )
    slow_query_log_file= 생성할 slow query 로그 파일 경로 ( ex. /opt/mysql/var/slow-query.log )
    long_query_time=3 ( 쿼리 수행 시간이 3초 이상일때 slow query 로그 기록 )

  2. mysql 재시작
    mysql/mariadb 실행|종료 명령어 : /opt/mysql/support-files/mysql.server start | stop
    mysql 5.1 버전 실행|종료 명령어 : /opt/mysql/share/mysql/mysql.server start | stop

주의할 점 : 슬로우 쿼리는 트랜잭션 단위의 쿼리가 아니라,
쿼리문장 단위로 탐지를 한다는 점이다.


0개의 댓글