11.8.1 쿼리의 성능에 영향을 미치는 요소
- 성능을 판단할 때 가장 큰 변수는 서버가 가지고 있는 여러 종류의 버퍼나 캐시
- 어떻게 버퍼나 캐시의 영향을 최소화하는지 살펴보자
운영체제의 캐시
- 운영체지의 파일 시스템 관련 기능(시스템 콜)을 이용해 데이터 파일을 읽음
- 대부분의 운영체제는 한 번 읽은 데이터는 운영체제가 관리하는 별도의 캐시 영역에 보관
- InnoDB 는 일반적으로 파일 시스템의 캐시/버퍼를 거치지 않는 Direct I/O 사용
- 운영체제 캐시에 의존도가 낮음
- MyISAM 은 반대
- 운영체제가 가지고 있는 캐시나 버퍼가 전혀 없는 상태로 테스트 하려면 아래 커맨드 수행
## 캐시/버퍼의 내용을 디스크와 동기화
linux> sync
## 운영체제에 포함된 캐시의 내용 초기화
linux> echo 3 > /proc/sys/vm/drop_caches
MySQL 서버의 버퍼 풀(InnoDB 버퍼 풀, MyISAM의 키 캐시)
- InnoDB 버퍼풀
- 인덱스 페이지, 데이터 페이지 캐시
- 쓰기 작업을 위한 버퍼링 작업 공간
- MySQL 서버가 종료될 때 자동으로 덤프되었다가 다시 시작될 때 자동으로 적재
- 다시 자동으로 덤프/적재 하지 않기 위해서는
innodb_buffer_pool_dump_at_shutdown
, innodb_buffer_pool_load_at_startup
을 OFF 로 해야함 (기본은 ON)
- 생각: 이렇게 까지 테스트 해야할까? OFF 했다가 문제있어 재시작 해야하는데 ON 하는 걸 깜빡하면 그것도 어느정도 프로덕트 쿼리 성능에 영향이 있을 것 같음 (애초에 서버가 내려가면 안되겠지만)
- MyISAM 키 캐시
- 읽기를 위한 캐시 역할
- 제한적으로 인덱스 변경만을 위한 버퍼 역할
- 운영체제 캐시의 큰 의존성을 가짐
- 강제 퍼지 방법은 없음 → 재시작
독립된 MySQL 서버
- MySQL 서버는 다른 프로세스 말고 MySQL 만 띄우자