본문 바로가기

리눅스 서버구축/MYSQL

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

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





Slow Query(슬로우쿼리)

Slow Query(슬로우쿼리)는 지정한 시간보도 실행하는데 오래걸리는 쿼리에 대한 log를 것입니다

특정 작업이 오래 걸린다면 로그를 통해 원인을 파악할 수 있겠습니다.

또한 대량이 데이터를 조회하거나 잘못된 인덱스 사용으로 인한 장시간 MySQL 프로세스가 물리는 현상이 발생 할 경우 어떤 쿼리문에 이런 현상을 발생 하였느냐에 대해서 분석시 Slow Query를 사용하면 부하가 증가되는 쿼리를 찾을 수 있을꺼라고 생각됩니다.



MySQL Slow Query 설정방법



MySQL 설정파일 Slow Query 설정



MySQL my.cnf 설정

[root@web ~]# vi my.cnf
[mysqld]
log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 3

슬로우 쿼리가 3초가 초과하는 쿼리에 대한 로그를 남기는 설정입니다.



log_slow_querise : 저장될 로그경로

long_query_time : 쿼리타임이 지정한 시간을 초과하는 부분만 저장



MySQL 재시작

[root@web ~]# /etc/init.d/mysqld restart



MySQL Slow Query 분석



Slow Query(슬로우 쿼리) 로그파일

# User@Host: DB_유저[DB_유저] @ server_hostname [서버IP]
# Query_time: 0.000599  Lock_time: 0.000163 Rows_sent: 3  Rows_examined: 86
SET timestamp=1489118717;
select count(*)

위와 같은 형식으로 로그파일에 Slow 쿼리를 남기게 됩니다.

Slow Query(슬로우 쿼리)로 남은 쿼리들은 explain을 사용하여 정상적인 index를 타고 있는지 체크하는 방법으로 문제를 찾으시면 될것으로 생각됩니다.



Query_time : 쿼리 처리시간

Lock_time : lock이 걸린 횟수

Row_sent : 조회 결과 Row 수

Rows_examined : 조회 대상 ROW 수



MySQL 쿼리 응답시간 체크



mysqladmin 명령어로 상태를 출력

[root@web ~]#  mysqladmin -i5 status -u root -p
Enter password: 
Uptime: 10578  Threads: 1  Questions: 4809  Slow queries: 589  Opens: 1321  Flush tables: 1  Open tables: 348  Queries per second avg: 0.454


Uptime : MySQL server 시삭된 후 현재 시간 (초 단위)

Threads : 현제 DB 서버에 연결된 유저수

Questions : 서버 시작후 지금까지 요청된 쿼리수

Slow queries : mysql 설정파일에 슬로우쿼리의 쿼리시간 이상을 가진 요청수

Opens : 서버가 시작된 후 현재까지 열렸던 테이블수

Open tables : 현재 열려 잇는 테이블 수

Queries per second avg : 평균 초단 쿼리수