ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 슬로우 쿼리 로그
    Technique/RDBMS 2016. 6. 6. 22:44
    반응형

    쿼리 튜닝은 크게 아래의 두가지 방법으로 나뉘어 진다


    1.서비스를 개시하기전 전체적으로 튜닝하는경우

        - 전체 쿼리가 모두 검토 대상이기에 모두 튜닝


    2. 서비스가 운영중이며, MySQL 서버의 전체적인 성능 저하를 검사하거나, 정기적인 점검

        - 어떤 쿼리가 문제의 쿼리인지 판단하기가 상당히 어렵다.


    이런 경우 서비스에서 사용되고 있는 쿼리 중에서 어떤 쿼리가 문제인지를 판단하는 데 슬로우 쿼리 로그가 상당히 많은 도움이 될 것이다.


    슬로우 쿼리 로그파일은 config 파일에 지정한 시간 ( long_query_time 초단위 설정 ) 이상의 시간이 소요된 쿼리가 모두 기록된다.


    슬로우 쿼리 로그는 MySQL이 쿼리를 실행한 후, 실제 소요된 시간을 기준으로 슬로우 쿼리 로그에 기록할지 여부를 판단하기 때문에 반드시 쿼리가 정상적으로 실행이 완료되어야 슬로우 쿼리 로그에 기록될 수 있다.


    MySQL 5.1이상에서는 log-output 설정옵션을 이용해 쿼리를 파일로 기록할지 테이블로 기록할지 선택할 수있다.


    5.0이하 버전에서는 소요 시간에서 소수점 이하 부분은 무시되지만, 5.1 이상에서는 마이크로 초 까지 표시된다.


    하지만 5.1이상에서도 슬로우 쿼리 로그를 테이블로 기록하는 경우에는 5.0 이하에서와 같이 소수점 이하의 부분은 무시된다.


    - Time : 이 항목은 쿼리가 시작된 시간이 아니라 쿼리가 종료된 시점을 의미한다. 그래서 쿼리가 언제 시작됐는지 확인 하려면 이 항목에 Query Time을 빼야한다


    - User@Host : 쿼리를 실행한 사용자의 계정


    - Query Time : 쿼리가 실행되는데 컬린 전체 시간을 의미한다. 


    - Lock Time : 두가지 레벨의 잠금 ( MySQL 엔진 레벨, 스토리지 레벨 ) 중 MySQL 엔진 레벨에서 관장하는 테이블 잠금에 대한 대기시간을 표기 이 수치가 0이 아니라고해서 무조건 잠금 대기가 있었다고 판단하기는 어렵다. 이 시간은 실제 쿼리가 실행되는 데 필요한 잠금 체크와 같은 코드 실행 부분의 시간까지 모두 포함되기 때문. 이값이 너무나 작다면 무시해도 무방하다.


    - Rows_examined : 쿼리가 처리되기 위해 몇 건의 레코드에 접근했는지를 의미 


    - Rows_sent : 실제 몇 건의 처리 결과를 클라이언트로 보냈는지를 의미 


    - Rows_examined 의 레코드 건수는 높지만 Rows_sent 에 표시된 레코드 건수가 상당히 적다면 이 쿼리는 조금 더 적은 레코드만 접근하도록 튜닝해 볼 가치가 있는 것이다

    ( GROUP BY나 COUNT(), MIN(), MAX(), AVG() 등과 같은 집합 함수가 아닌 쿼리의 경우에만 해당 )

    반응형

    'Technique > RDBMS' 카테고리의 다른 글

    MySQL INET 함수  (0) 2016.11.17
    트랜잭션(Transaction)  (0) 2016.06.06
    바이너리 로그, 릴레이 로그  (0) 2016.05.22
    에러 로그 파일  (0) 2016.05.19
    MEMORY 스토리지 엔진 아키텍처  (0) 2016.05.19

    댓글

Designed by Tistory.