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 : 평균 초단 쿼리수