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초가 초과하는 쿼리에 대한 로그를 남기는 설정입니다.


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


    Posted by 서버이야기