4.3 MyISAM 스토리지 엔진 아키텍처
4.2.13 InnoDB와 MyISAM, MEMORY 스토리지 엔진 비교
- MySQLdl 8.0으로 업그레이드되면서 MySQL 서버의 모든 시스템이 InnoDB 스토리지 엔진으로 교체되었다.
- InnoDB 스토리지 엔진 기능이 개선되면서 MyISAM 스토리지 엔진 기능은 도태되는 상황이며 이후 버전에서는 없어질 것으로 예상한다.
- MEMORY 스토리지 엔진 또한 동시 처리 성능에 있어 InnoDB를 따라갈 수 없다.
- MEMORY 스토리지 엔진은 하나의 스레드에서만이라면 InnoDB보다 빠를 수 있지만 온라인 트랜잭션 처리 목적으로 사용되는 MySQL 특성 상 동시 처리 성능이 매우 중요하다.
4.3 MyISAM 스토리지 엔진 아키텍처
MyISAM 스토리지 엔진의 성능에 영향을 미치는 요소에는 키 캐시와 운영체제의 캐시/버퍼가 있다.
4.3.1 키 캐시
- InnoDB의 버퍼 풀과 비슷한 역할을 한다.
- 인덱스만을 대상으로 작동하며 인덱스의 디스크 쓰기 작업에 대해 부분적으로 버퍼링 역할을 한다.
4.3.2 운영체제의 캐시 및 버퍼
- MyISAM에선 테이블의 데이터에 대해 디스크 I/O 수행 시 어떠한 캐시나 버퍼링 기능도 없다.
- 물론 대부분의 운영체제가 디스크 I/O에 대해 캐시나 버퍼링 매커니즘을 가지고 있기에 매번 디스크의 파일을 읽지는 않는다.
- 따라서 운영체제가 자체 캐시, 버퍼링 기능을 수행할 수 있도록 운영체제가 사용할 수 있는 메모리 공간을 비워둬야 한다.
- 운영체제는 남는 메모리 공간을 캐시 공간으로 활용한다.
- MyISAM을 주로 사용하는 MySQL이라면 키 캐시 공간으로 최대 물리 메모리의 40% 이상을 넘지 않게 설정하고 나머지 메모리 공간을 운영체제 자체 캐시 공간으로 활용할 수 있도록 하는 것이 좋다.
4.3.3 데이터 파일과 프라이머리 키(인덱스) 구조
- InnoDB에선 테이블이 프라이머리 키에 의해 클러스터링 되어 저장되는 반면 MyISAM에서는 데이터 파일이 클러스터링 없이 힙 공간처럼 활용된다.
- MyISAM에 저장되는 테이블 레코드는 모두 ROWID라는 물리 주소값을 가지는데 프라이머리 키와 세컨더리 인덱스 모두 ROWID 값을 포인터로 가진다.