MyISAM 특징
MyISAM 테이블의 인덱스는 키 캐시를 이용하여 빠르게 검색이 가능하다.
데이터에 대해서는 자체적인 캐시나 버퍼링 기능이 없다.
따라서 데이터의 읽기/쓰기는 항상 운영체제의 디스크 I/O로 처리된다.
Key cache (키 버퍼)
InnoDB의 버퍼 풀과 비슷한 역할을 수행한다.
인덱스만들 대상으로 작동된다.
캐시 히트율 계산
키 캐스 히트율(Hit rate) : 100 - (Key_reads / Key_read_requests * 100)
- Key_read : 인덱스를 디스크에서 읽어 들인 횟수
- Key_read_requests : 키 캐시로부터 인덱스를 읽은 횟수
상태 값을 알아보는 명령어
SHOW GLOBAL STATUS LIKE 'Key%';
운영체제의 캐시 및 버퍼
-
운영체제는 파일에 대한 캐시와 버퍼링 메커니즘이 있어 이를 통해 디스크 접근을 줄일 수 있음
-
운영체제 캐시는 InnoDB 만큼 전문적이지는 않으나 성능에는 도움
-
운영체제 캐시는 남는 메모리를 사용
-
MyISAM 테이블을 주로 사용한다면 운영체제를 위한 충분한 여유 공간 확보 필요
-
책에서는 MyISAM을 주로 사용하는 경우 키 캐시를 물리 메모리의 40% 이하로 설정하도록 권장
데이터 파일과 PK(index) 구조
-
데이터 저장 방식
- InnoDB : PK에 의해 클러스터링 되어 저장
- MyISAM : PK와 무관하게 INSERT 순서대로 저장 (Heap 공간처럼 활용)
-
ROWID
- MyISAM 테이블의 각 레코드가 가지는 물리적 주소값
- PK와 세컨터리 인덱스 모드 ROWID를 포인터로 사용
-
ROWID 저장 방식
- 고정 길이 ROWID
- MAX_ROWS 옵션을 사용할 경우
- 4바이트 정수 사용
- INSERT된 순번이 ROWID로 사용
- 가변 길이 ROWID
- MAX_ROWS 옵션을 사용하지 않을 경우
- myisam_data_pointer_size 시스템 변수에 따라 2-7바이트 사용
- 첫 번째 바이트는 ROWID 길이 저장, 나머지는 실제 ROWID 저장
- 데이터 파일에서 레코드의 위치(Offset)가 ROWID로 사용
- 고정 길이 ROWID
-
테이블 크기 제한
- 가변 길이 ROWID 사용 시 기본적으로 최대 256TB (2^48)
- myisam_data_pointer_size를 8로 설정 시 최대 64PB (2^56)까지 확장 가능
-
인덱스 구조
- 프라이머리 키와 세컨더리 인덱스 모두 ROWID를 통해 실제 데이터에 접근
- InnoDB와 달리 프라이머리 키가 데이터 정렬이나 저장에 영향을 주지 않음
-
성능 특성
- 순차적 INSERT가 빠름 (데이터가 순서대로 저장되므로)
- 하지만 프라이머리 키 기반 검색 시 InnoDB에 비해 추가적인 디스크 I/O 발생 가능
참고 내용
- Real MySQL 8.0 1권 (백은빈, 이성욱)