SGA - DB buffer cache

Oracle DB 2019. 9. 3. 14:20

https://docs.oracle.com/en/database/oracle/oracle-database/18/cncpt/memory-architecture.html#GUID-093B7282-1A44-4E29-9E9A-B8511F4267C9

 

/* SGA = shared pool + large pool + db buffer cache + redo log buffer + ... */

 

1. 목적: IO 최적화(redo log buffer 사용), data block 캐싱(flash disk 사용 시 가능)

 

2. buffer state: 1) Unused: 한 번도 안씀, 2) Clean: 썼다 지움, 3) Dirty: 아직 disk에 안씀(ckpt 되어야 clean 가능)

 

3. buffer mode: current mode, consistent mode에 따라 캐시의 내용을 undo data 사용해서 주냐 안주냐 차이이다.

 

4. buffer IO: LRU 알고리즘 or Temperature based, object-level replacement algo. 를 사용해서 data block을 교체하는데, 보통 LRU 씀. pinned 된 버퍼에는 touch count라는 개념을 쓰기도 하는데, 최근 3초내에 한 번 이상 사용되었으면 +1이 된다. touch count가 높은데 cold end에 있는 block이라면 hot end로 옮겨준다. DBWR는 주기적으로 cold, dirty 버퍼를 디스크에 써준다. 새 버퍼 블록이 필요한데 clean block이 없거나, threshold 이하 개수로 떨어지면 쓰고, LRU cold의 끝에 다다른 블록 또한 써준다. 특이한 상황으로는 checkpoint로 instance recovery를 진행해야할 경우, tablespace가 read-only로 되거나 offline으로 전환될 때 버퍼를 디스크에 쓴다.

 

flash cache를 사용하는 경우 buffer load 방식은 다른건 다 비슷한데, buffer cache, flash cache 둘다 미스나면 디스크에서 가져와서 둘 다에 등록하는 점이 주목할 만 하다.

 

5. buffer pools: 버퍼들의 집합이다. 또한 DB 버퍼 캐시는 여러 개의 버퍼 풀로 구성된다. 버퍼 풀은 Default pool(보통 블록들이 캐시되는 곳), Keep pool(자주 사용하는 블록들 담을 캐시, 공간 부족으로 block이 aged out이 될 수도 있다.), Recycle pool(한 번만 쓰고 재사용할 블록들을 모아둔 캐시)가 있다.

 

6. full table scans: 풀 테이블 스캔 시 작은 테이블은 SGA에 로드하고, 큰 테이블은 PGA에 바로 로드시킨다. 중간 사이즈는 SGA에 로드시킬 경우, 블록을 LRU의 마지막 우선순위에 넣어서 캐시 용량을 많이 사용하지 않도록 한다.

'Oracle DB' 카테고리의 다른 글

DBMS의 LOB 저장 구조  (0) 2020.04.09
DB에 redo log가 필요한 이유  (0) 2020.04.06
SGA - large pool, java pool, fixed SGA  (0) 2019.09.03
SGA - shared pool  (0) 2019.08.31
기본 구조  (0) 2019.08.31
Posted by sjo200
,