[MySQL] 슬로우 쿼리 로그 확인

박상준·2024년 5월 1일
0

mysql

목록 보기
8/8
post-custom-banner

👓슬로우 쿼리 로그의 역할

  • 성능 저하의 진단
    • 서비스 운영 중 발생하는 MySQL 서버의 성능 저하 원인을 진단함
  • 문제 쿼리 식별
    • 어떤 쿼리가 성능 문제를 일으키는지 식별하는 데 유용함.

📖long_query_time 설정

  • 기록 기준
    • long_query_time 시스템 변수에 설정된 시간 이상 걸리는 쿼리를 기록한다
  • 시간 단위
    • 초 단위로 설정하고, 소수점을 통해 마이크로초 단위로도 설정가능

📝로그 기록의 조건

  • 실행 완료 쿼리
    • 쿼리가 정상적으로 실행 완료되어야 로그에 기록
  • 시간 초과 쿼리
  • long_query_time보다 많은 시간이 걸린 쿼리만 기록

📊 log_output 옵션

  • 로그 저장 방식의 설정
    • 슬로우 쿼리 로그를 파일 또는 테이블로 기록할지 선택이 가능하다.
  • TABLE 설정
    • mysql DB 의 slow_loggeneral_log 테이블에 저장한다.
  • FILE 설정
    • 로그 내용을 파일로
  • CSV 스토리지
    • TABLE 로 설정해도 CSV 스토리지 엔진을 사용하여 CSV 파일로 저장된다.

📈 슬로우 쿼리 로그 예시

# Time: 2020-07-19T15:44:22.178484+09:00
# User@Host: root[root] @ localhost [] Id: 14
# Query_time: 1.180245 Lock_time: 0.002658 Rows_sent: 1 Rows_examined: 2844047
use employees;
SET timestamp=1595141060;
select emp_no, max(salary) from salaries;
  • Time 항목
    • 쿼리 종료 시점
      • Time 은 쿼리가 끝난 시간을 말함
    • 쿼리 시작 시간 계산
      • 시작 시간을 알고 싶은 경우 Time 에서 Query_time 을 빼면 된다.
  • 🧑 User@Host
    • 실행 사용자 정보
  • ⏲️ 'Query_time'
    • 쿼리 실행에 걸린 전체 시간
    • Lock_time 은.. MySQL 엔진 레벨의 테이블 잠금 대기 시간임.
    • 실제 잠금 체크시간도 포함되기에, 매우 작은 값은 무시해도 된다.
  • Rows_sent
    • 클라이언트로 보낸 결과의 레코드 수
  • Rows_examined
    • 쿼리 처리를 위해 접근한 레코드의 수

      Rows_sent 가 적고, Rows_examined 가 많다면, 튜닝을 고려해볼 가치가 있다.

  • 잠금 매커니즘
    • MyISAM/MEMORY
      • 테이블 단위 잠금을 사용하므로 SELECT 쿼리에서도 'Lock_time'이 길어질 수 있음.
    • InnoDB
      • 레코드 수준의 잠금을 사용. InnoDB 테이블 쿼리에서는 'Lock_time'이 튜닝에 큰 도움이 되지 않을 수 있음.
  • 근데 이렇게 raw 하게 보는 방법 말고 Percona Toolkit =⇒ py-query-digest 스크립트를 사용하여 로그 파일을 가독성있게 분석이 가능하다.
    • Slow Logpt-query-digest --type='slowlog' mysql-slow.log > parsed_mysql-slog.log

profile
이전 블로그 : https://oth3410.tistory.com/
post-custom-banner

0개의 댓글