Loading...
MySQL 9.5 Reference Manual 9.5의 10.10.2 The MyISAM Key Cache의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
10.10.2.1 Shared Key Cache Access 10.10.2.2 Multiple Key Caches 10.10.2.3 Midpoint Insertion Strategy 10.10.2.4 Index Preloading 10.10.2.5 Key Cache Block Size 10.10.2.6 Restructuring a Key Cache
disk I/O를 최소화하기 위해 MyISAM 스토리지
엔진은 많은 데이터베이스
관리 시스템에서 사용하는 전략을 활용합니다. 이 엔진은
가장 자주 접근되는 테이블 블록을 메모리에 유지하기 위한
캐시 메커니즘을 사용합니다:
index 블록의 경우, key cache (또는 key buffer)라고 불리는 특수한 구조가 유지됩니다. 이 구조는 가장 많이 사용되는 index 블록이 배치되는 여러 개의 블록 버퍼를 포함합니다.
data 블록의 경우, MySQL은 별도의 특수한 캐시를 사용하지 않습니다. 대신 네이티브 운영 체제 파일 시스템 캐시에 의존합니다.
이 절에서는 먼저 MyISAM key cache의 기본 동작에 대해 설명합니다.
그 다음 key cache 성능을 향상시키고 캐시 동작을 더 잘 제어할 수 있게 해 주는 기능들을 설명합니다:
여러 세션이 캐시에 동시에 접근할 수 있습니다.
여러 개의 key cache를 설정하고 테이블 index를 특정 캐시에 할당할 수 있습니다.
key cache의 크기를 제어하려면
key_buffer_size 시스템
변수를 사용하십시오. 이 변수가 0으로 설정되어 있으면
어떠한 key cache도 사용되지 않습니다. 또한
key_buffer_size 값이 블록 버퍼의 최소 개수(8개)를
할당하기에 너무 작으면 key cache는 사용되지 않습니다.
key cache가 동작하지 않을 때는 index 파일에 접근할 때 운영 체제가 제공하는 네이티브 파일 시스템 버퍼링만 사용됩니다. (다시 말해, 테이블 index 블록은 테이블 data 블록에 적용되는 것과 동일한 전략으로 접근됩니다.)
index 블록은 MyISAM index 파일에 대한 연속적인
접근 단위입니다. 일반적으로 index 블록의 크기는
index B-tree 노드의 크기와 같습니다.
(index는 B-tree 데이터 구조를 사용하여 disk에 표현됩니다.
tree의 맨 아래에 있는 노드는 leaf 노드입니다.
leaf 노드 위에 있는 노드는 nonleaf 노드입니다.)
key cache 구조 내의 모든 블록 버퍼는 크기가 동일합니다. 이 크기는 테이블 index 블록의 크기와 같거나, 크거나, 작을 수 있습니다. 일반적으로 이 두 값 중 하나는 다른 하나의 배수입니다.
어떤 테이블 index 블록의 data에 접근해야 할 때, 서버는 먼저 그것이 key cache의 어떤 블록 버퍼에서 사용 가능한지 확인합니다. 사용 가능하다면 서버는 disk가 아닌 key cache에서 data에 접근합니다. 즉, disk에서 읽거나 disk로 쓰는 대신 캐시에서 읽거나 캐시에 씁니다.
그렇지 않으면, 서버는 다른 테이블 index 블록(들)을 포함하는 캐시 블록 버퍼 하나를 선택하고, 그 안의 data를 필요한 테이블 index 블록의 복사본으로 교체합니다. 새로운 index 블록이 캐시에 들어오면, index data에 접근할 수 있습니다.
교체 대상으로 선택된 블록이 수정된 상태라면, 해당 블록은 “dirty”한 것으로 간주됩니다. 이 경우 교체되기 전에 그 내용이 원래의 테이블 index로 플러시됩니다.
일반적으로 서버는 LRU (Least Recently Used) 전략을 따릅니다. 즉, 교체할 블록을 선택할 때 가장 최근에 사용되지 않은 index 블록을 선택합니다. 이 선택을 더 쉽게 하기 위해, key cache 모듈은 사용된 모든 블록을 사용 시간 순으로 정렬된 특수한 목록(LRU chain)에 유지합니다. 블록에 접근되면 그 블록은 가장 최근에 사용된 것이 되며 목록의 끝에 배치됩니다. 블록을 교체해야 할 때, 목록의 앞쪽에 있는 블록이 가장 최근에 사용되지 않은 블록이며 축출의 최우선 후보가 됩니다.
InnoDB 스토리지 엔진 역시 LRU
알고리즘을 사용하여 버퍼 풀을 관리합니다.
Section 17.5.1, “Buffer Pool”을 참조하십시오.
10.10.1 InnoDB Buffer Pool Optimization
10.10.3 Caching of Prepared Statements and Stored Programs