본문 바로가기
공부/Mysql

[RealMysql 8.0]04아키텍처 4.2.13 ~ 4.4.3.3 슬로우 쿼리

by 띵커베르 2023. 2. 3.
728x90
  • InnoDB와 MyISAM, MEMORY 스토리지 엔진 비교
    • 5.5부터 innodb 스토리지 엔진이 기본 스토리지 엔진으로 채택됐지만, 시스템 테이블 (사용자 인증 관련된 정보와 복제 관련된 정보가 저장된 mysql DB의 테이블)은 여전히 MyISAM을 사용, 또한 전문검색, 좌표검색 기능은 MyISAM 에서만 지원
    • 8.0부터 모든것을 InnoDB 스토리지 엔진으로 대체되었음.
  • 4.3 ~ 4.4.2 까지는 넘어감.
  • 슬로우 쿼리 로그
    • 시스템변수 long_query_time 으로 설정된 값보다 높을시 log_output 으로 지정된 값에 따라 테이블에 저장할지, 디스크로 저장할지 나뉘게된다.(TABLE, FILE)(둘다 CSV 파일로 저장하는 것과 동일하게 작동)
    • mysql 의 잠금 처리는 mysql 엔진 레벨과 스토리지 엔진 레벨의 두가지 레이어로 처리된다.
      • MyISAM 이나 MEMORY 스토리지 엔진과 같은 경우에는 별도의 스토리지 엔진 레벨의 잠금을 가지지 않지만
      • InnoDB의 경우 mysql 엔진 레벨의 잠금과 스토리지 엔진 자체 잠금을 가지고 있다.
      • MyISAM 이나 MEMORY 스토리지 엔진에서는 테이블 단위 잠금을 사용하고 MVCC와 같은 메커니즘이 없기 때문에 select 쿼리라 하더라도 lock_time이 1초 이상 소요될 가능성이 있다.
      • 가끔 InnoDB 테이블에 대한 select 쿼리도 lock_time이 상대적으로 큰 값이 발생할 수 있다.
        • 이는 Innodb 레코드 수준의 잠금이 아닌 mysql 엔진 레벨에서 설정한 테이블 잠금 때문일 가능성이 높다.
        • 이러한 이유로 인해 슬로우 쿼리에서는 lock_time 값은 튜닝이나 쿼리 분석에 별로 도움이 되지 않는다.
      • 해당 내용은 상당히 많아서 직접 쿼리를 하나씩 검토하기에는 시간이 많이 걸리고 어떠한 쿼리를 집중적으로 튜닝해야 할지 식별이 어려워 Percona 에서 개발한 Percona Tollkit 의 pt-query-digest 스크립트를 이용해 성능별 쿼리를 정렬해서 본다.
      • 명령어를 통한 로그파일이 분석이 완료되면 3개의 그룹으로 나뉘어 저장된다.
        • 슬로우 쿼리통계
        • 실행 빈도 및 누적 실행 시간순 랭킹
        • 쿼리별 실행 횟수 및 누적 실행 시간 상세 정보
728x90

댓글