키 캐시
InnoDB 의 버퍼 풀과 비슷한 역할
인덱스에 대해서만 동작하며 캐시 히트율을 99% 이상으로 잡을 것이 권장됨
인덱스의 디스크 쓰기에만 일부 쓰기 버퍼링이 사용됨
자주 사용하는 인덱스는 자동으로 키 캐시 메모리에 저장되며, 수동으로 CACHE INDEX 문을 사용해 인덱스를 키 캐시에 올릴 수 있음
운영체제의 캐시 및 버퍼
MyISAM 엔진은 키 캐시로 메모리에서 쿼리를 빠르게 처리할 수 있지만, 디스크 I/O를 최적화하는 전략은 아무것도 없음
운영체제의 캐시 기능은 InnoDB 처럼 데이터의 특성을 통해 전문적으로 처리할 수는 없지만 없는거보다는 나음
MyISAM 이 주로 사용되는 MySQL 서버에는 키 캐시로 40%를 넘지않는 메모리를 사용하도록 설정하고, 나머지 공간은 운영체제가 캐시로 사용할 수 있도록 남겨두는 것이 좋음
데이터 파일과 프라이머리 키 구조
InnoDB 엔진은 프라이머리 키에 의해 데이터를 클러스터링하여 저장하지만, MyISAM 엔진은 그냥 Insert 되는 순서대로 데이터 파일에 저장된다.
레코드들은 모두 ROWID 라는 물리적인 주소값을 갖고, 프라이머리 키, 세컨더리 인덱스 모두 이 ROWID 를 포인터로 사용한다.
MySQL 서버에는 서버의 상태를 진단할 수 있는 많은 도구들이 존재하지만, 사용법이 어렵다. 하지만 로그 파일을 이용하면 쉽게 에러의 원인을 찾는 등의 문제 해결이 가능하다.
에러 로그 파일
log_error 설정값으로 정의된 경로에 에러 로그 파일이 생성된다.
에러 로그 파일에서 가장 자주 보는 메시지들
MySQL 시작하는 과정과 관련된 메시지
특별한 에러나 경고성 메시지가 없다면 정상 동작으로 판단하면 된다.
마지막에 비정상적으로 종료된 경우에 나타나는 InnoDB의 트랜잭션 복구 메시지
비정상적으로 종료된 경우 완료되지 못한 트랜잭션을 정리하고, 기록되지 않은 데이터가 있다면 기록하는데, 이 과정에 대한 간단한 메시지가 출력된다.
복구 중 에러가 발생하면 에러 메시지를 띄우며, 앞서 살펴봤듯이 innodb_force_recovery 파라미터를 조절해가며 복구해볼 수 있다.
쿼리 처리 도중에 발생하는 에러 메시지
비정상적으로 종료된 커넥션 메시지
InnoDB 모니터링 또는 상태 조회 명령의 결과 메시지
모니터링을 활성화할 경우 에러 로그 파일에도 그 정보가 기록된다. 따라서 오래 모니터링을 활성화해두면 에러 로그 파일이 엄청 커질 수 있다.
MySQL 종료 메시지
제너럴 쿼리 로그 파일
쿼리 로그를 활성화하면 작성되는 파일로, 요청받은 쿼리를 그대로 파일에 기록한다. 요청하는 쿼리 유형에는 무엇이 있는지 확인하는 용도로 사용하기 좋다.
쿼리 수행이 실패하더라도 쿼리 요청시에 바로 기록되어 로그가 남아 있다.
general_log_file 설정값에 설정된 경로에 로그 파일이 존재하며, log_output 설정값에 따라 파일이 아닌 테이블에 저장할 수도 있다.
슬로우 쿼리 로그
long_query_time 시스템 변수에 설정한 시간 이상의 시간이 소요된 쿼리를 모두 슬로우 쿼리 로그에 기록한다.
쿼리 시작 시간부터 수행이 완료된 시간을 측정하므로 수행에 실패한 쿼리는 기록되지 않는다.
log_output 설정값으로 제너럴 쿼리 로그와 함께 테이블로 저장할 지 파일로 저장할 지 설정할 수 있다.
쿼리 수행 시간, 쿼리 완료 시각, 접근한 데이터 사이즈, 출력한 데이터 사이즈 등 다양한 값을 조회하여 슬로우 쿼리를 튜닝하는 데 용이하다.