본문으로 바로가기

SGA(System Global Area)는 빠른 입출력을 위해 사용된다. 그 구성요소중 하나가 바로 DB버퍼 캐시

 

1) 블록 단위 I/O
 하나의 레코드에서 하나의 컬럼만 읽게 되더라도 레코드 전체가 속한 블록 전체를 읽게 된다.

 

2) 버퍼 캐시의 구조

  버퍼 캐시는 데이터 블록을 내포하고 있으며, 해시 테이블 구조로 관리된다.

 

 

 

* 데이터 블록을 해싱 하기위해서 사용되는 것이 데이터 블록 주소(DBA, Data Block Address)

* 각각의 버퍼 헤더를 연결 하는것이 해시 체인(hash chain)

* 해시 체인은 래치(Latch)에 의해 보호된다.(같은 리소스에 대한 액세스를 직렬화하는 일종의 Lock)

* cache buffers chains래치

  - 해시체인에 동시에 접속되는것을 방지하며, 여러 해시 체인을 동시에 관리

  - 버퍼 캐시에 연결된 체인구조를 보호한다.

  - 버퍼 헤더에 Pin을 설정할때도 사용된다.

 

* LRU(least recently used) 

  - 사용빈도가 높은 데이터 블록이 위주로 사용되도록 하는 알고리즘(빈도가 낮은 데이터 블록 부터 밀어냄)

  - MRU(Most Recently Used) end  ----> LRU(least recently used)  end

  1) Dirty 리스트(=LRUW(LRU Write)) : 캐시 내에서 변경 됐지만, 아직 디스크에 기록되지 않은 Dirty 버퍼 블록을 관리.

  2) LRU 리스트 : 아직 Dirty 리스트로 옮겨지지 않은 나머지 버퍼 블록을 관리

                       (해당 리스트를 보호하기 위한 래치 : cache buffers lru chain래치)

 

* 버퍼 상태

  1) Free 버퍼 : 비어있는 상태이거나, 언제든 사용되어도 무방한 상태(사용될 시 Dirty 버퍼로 변경)

  2) Dirty 버퍼 : 버퍼 캐시되어으나 아직 디스크에 기록되지 않은 버퍼 블록(디스크에 기록될시 Free버퍼로 변경)

  3) Pinned 버퍼 : 읽기,쓰기 작업을 위해 액세스 되고 있는 버퍼 블록

 

 

출처

조시형,『오라클 성능 고도화 원리와 해법Ⅰ』