Source
https://velog.io/@jsj3282/37.-쿼리-성능-테스트
쿼리의 성능에 영향을 미치는 요소
운영체제의 캐시
- InnoDB 스토리지 엔진은 일반적으로 파일 시스템의 캐시나 버퍼를 거치지 않는 Direct I/O를 사용하므로 운영체제의 캐시가 그다지 큰 영향을 미치지 않는다.
- MyISAM 스토리지 엔진은 운영체제의 캐시에 대한 의존도가 높기 때문에 운영체제의 캐시에 따라 성능의 차이가 큰 편이다.
- 대부분의 운영체제는 한 번 읽은 데이터는 운영체제가 관리하는 별도의 캐시 영역에 보관해 뒀다가 다시 해당 데이터가 요청되면 디스크를 읽지 않고 캐시의 내용을 바로 MySQL 서버로 반환한다.
- 운영체제가 가지고 있는 캐시나 버퍼가 전혀 없는 상태에서 쿼리의 성능을 테스트하려면 MySQL 서버를 재시작 하거나, 캐시 삭제 명령을 실행하고 테스트 해야한다.
MySQL 서버의 버퍼 풀
- MySQL 서버에서도 데이터 파일의 내용을 페이지 또는 블록 단위로 캐시하는 기능을 제공한다.
- InnoDB 스토리지 엔진이 관리하는 캐시 : 버퍼 풀
- 인덱스 페이지, 데이터 페이지 캐시, 쓰기 작업을 위한 버퍼링 작업까지 겸해서 처리
- MyISAM 스토리지 엔진이 관리하는 캐시: 키 캐시
- 인덱스 데이터 대해서만 캐시 기능을 제공
- 주로 읽기를 위한 캐시 역할 수행
- 제한적으로 인덱스 변경만을 위한 버퍼 역할을 수행
- 결국 MyISAM 스토리지 엔진에서는 인덱스를 제외한 테이블 데이터는 모두 운영체제의 캐시에 의존할 수 밖에 없음
- MySQL이 한번 기동된 상태에서는 InnoDB의 버퍼 풀과 MyISAM의 키 캐시 크기를 변경하거나 내용을 강제로 Purge(삭제)하는 명령이 없다. MySQL 서버에 포함된 키 캐시나 버퍼 풀을 초기화 하려면 MySQL 서버를 재 시작 해야 한다.
- 일반적으로 서비스 쿼리는 버퍼 풀이나 키 캐시가 준비된 상태에서 실행되기 때문에 처음 실행했을 때의 결과를 버리고 여러번 테스트해서 그 결과를 기준으로 판단하는 것이 좋다.
MySQL 쿼리 캐시
- 쿼리 캐시: 이전에 실행했던 SQL 문장과 그 결과를 임시로 저장해두는 메모리 공간을 의미
- 만약 어떤 쿼리의 결과가 이미 쿼리 캐시에 있었다면 그 쿼리는 전체 실행 과정을 건너뛰기 때문에 실제 부하와 관계없이 아주 빠르게 처리될 것