서론
MyISAM 스토리지 엔진 성능에 영향을 미치는 요서인 키 캐시와 운영체제의 캐시/버퍼에 대해 살펴보자
MyISAM 특징
키 캐시(Key cache, 키 버퍼라고도 불림)
특징
100 - (Key_reads / Key_read_requests * 100)Key_read_requests: 캐시에서 인덱스 요청한 횟수Key_reads: 디스크에서 읽은 횟수작동 방식
1. MyISAM 인덱스는 디스크에 B-Tree 구조로 저장됨
2. 쿼리를 실행하면 인덱스 블록을 키 캐시에서 먼저 찾음 (hit)
3. 없으면 디스크에서 읽어 키 캐시에 적재하고 사용 (miss)
-> 그래서 키 캐시의 효율 = 인덱스 검색 속도
키 캐시 여러 개 만들 수 있음
MyISAM은 여러 개의 키 캐시를 만들어 특정 테이블 인덱스를 특정 캐시에 매핑 가능
=> 인덱스를 여러 캐시에 나눠 병목을 줄이는 구조
핵심 포인트
차이(InnoDB vs MyISAM)
| 항목 | InnoDB | MyISAM |
|---|---|---|
| 데이터 캐시 | Buffer Pool(전문적, 고성능) | 없음 |
| 운영체제 캐시 사용 | 제한적 | 대부분 의존 |
| 동시 처리 성능 | 높음 | 매우 낮음(테이블 락) |
-> 결국 동시성 & 캐싱 성능 모두 InnoDB가 압도적
운영체제 캐시의 문제
운영체제 파일 캐시는 전문 DB 캐시가 아님
핵심 포인트
MyISAM 데이터 파일 구조는 힙 파일(Heap) 형태
InnoDB VS MyISAM 저장 구조 차이
| 항목 | InnoDB | MyISAM |
|---|---|---|
| 프라이머리 키 기반 클러스터링 | O | X |
| 데이터 저장 방식 | PK 순서대로 정렬된 B+Tree | Heap(삽입 순서대로) |
| 세컨더리 인덱스 | PK 포함 | RowID 포함 |
| RowID | 숨겨진 PK | 물리적 포인터 |
MyISAM에서 ROWID 구조
MyISAM 테이블의 모든 레코드는 ROWID(파일 내부 offset)을 가짐
-> PK든 인덱스든 "데이터 파일의 물리적 위치"를 가리킴
=> 인덱스 레벨에서는 빠름(단순 포인터)
=> 하지만 데이터 파일이 Heap이기 때문에 레인지 스캔은 InnoDB보다 느림
ROWID 저장 방식 두 가지
1. 고정 길이 ROWID (4바이트)
→ MAX_ROWS 옵션으로 최대 개수를 지정한 경우