TIL

4.4 MySQL 로그 파일

로그 파일을 이용하면 MySQL의 상태나 부하를 일으키는 원인을 쉽게 찾아 해결할 수 있다.

4.4.1 에러 로그 파일

MySQL이 실행되는 도중에 발생하는 에러나 경고 메시지가 출력되는 로그 파일이다. MySQL 설정 파일(my.cnf)에서 log_error라는 이름의 파라미터로 정의된 경로에 생성된다.

4.4.2 제너럴 쿼리 로그 파일(제너럴 로그 파일)

4.4.3 슬로우 쿼리 로그

서비스 운영 중에 MySQL 전체적인 튜닝을 한다고 할 때 슬로우 쿼리 로그가 많은 도움이 된다.

슬로우 쿼리 살펴보기

InnoDB에선 MySQL 엔진 레벨 잠금과 스토리지 엔진 레벨 잠금이 각각 있기에 슬로우 쿼리 로그가 혼란스러울 수도 있다.

# Time: 2020-07-19T15:44:22.178484+09:00
# User@Host: root[root] @localhost [I Id: 14
# Query_time: 1.180245 Lock_time: 0.002658 Rows_sent: 1 Rows_examined: 2844047 
use employees;
SET timestamp=1595141060;
select empno, max(salary) from salaries; 

가끔 InnoDB 테이블에 대한 SELECT 쿼리에서 Lock_time이 1초 이상 소요될 수 있는데 이는 MySQL 엔진 레벨에서 설정한 테이블 잠금 때문일 가능성이 높다. 그래서 Lock_time 값은 튜닝이나 쿼리 분석에 별로 도움 되지 않는다.

Percona Toolkit의 pt-query-digest 스크립트

일반적으로 슬로우 쿼리나 제너럴 로그 파일 내용은 하나씩 검토하기에 너무 복잡하다. Percona Tookit의 pt-querydigest 스크립트를 이용하면 쉽게 빈도나 처리 성능별로 쿼리를 정렬해서 살펴볼 수 있다.

## General Log 파일 분석
linux> pt-query-digest --type-'genlog' general.log > parsed_general.log
## SLOw Log 파일 분석
linux> pt-query-digest--type='slowlog' mysal-slow.1og > parsed_mysal-slog.log

파일 분석이 완료되면 3개의 그룹으로 나뉘어 저장된다.