- 오라클 프로세스가 Free Buffer 를 찾는 과정 -


Database Buffer Cache

최근에 사용된 데이타베이스의 데이타 블록을 저장하고 있는 Database Buffer 영역으로 DBWR(Database Writer Process) 에 의해서 관리된다

Free Buffer는 오라클 서버 프로세스에 할당되어 사용되고, 사용 후 Dirty Buffer가 된 Buffer들은 DBWR에 의해 디스크에 쓰여진 후 다시 Free Buffer가 되어 오라클 서버 프로세스에 의해 재사용되는 작업을 반복하게 된다.


Free Buffer 를 찾는 과정

1. 오라클 프로세스가 LRU List Lock을 걸고 LRU의 끝부분부터 Free Buffer 블록을 찾기 시작한다. 이를 찾는 중에 Dirty Buffer를 만나면, Dirty Buffer LRUW List에 옮긴다.

2. LRU List
를 찾을 때도 끝까지 다 찾는 것은 아니고, Kernel에서 지정하는 어느 특정 값만큼 Depth를 정하여 스캔하며, 이 개수(foreground scan depth) 내에서 찾지 못하면 오라클 프로세스는 더 이상 LRU List 는 읽지 않고 , DBWR에게 Dirty Buffer를 모으도록 하는 메시지를 보내는 작업이 수행되고 LRU Latch는 해제된다.

3.
메시지를 받은 DBWR LRU Latch Lock을 걸고, LRU 꼬리 부분에서 DBWR Scan Depth만큼의 디스크에 쓰여져야 할 Dirty Buffer들을 모으는 Large Batch Write를 수행한다.

4. LRUW
에 모인 Dirty Buffer DBWR에 의해 디스크로 쓰여지고 나면 이 Buffer Free Buffer로 되어 다시 사용될 수 있도록 LRU의 끝부분에 위치하게 된다.



* 오라클 Database Buffer Cache 안의 블록들은 모두가 LRU List / LRUW List 둘중 하나에 속하게 된다.


용어 설명

 - LRU(Least Recently Used) List : 최근에 읽혀진 Datafile Block Buffer Cache  보관하고, 새로운 Block 이 파일에서 읽혀질 필요가 있으면 사용한지 가장 오래된 버퍼들부터 메모리에서 없어지도록 관리하기 위한 Buffer Cache 내의 Block List를 유지관리함.

 - Dirty List(LRUW List) : Buffer Cache 안의 Block들은 그 상태에 따라서 다음 세가지 상태를 가진다.

   1. Free Buffer   : Dirty Buffer가 디스크에 쓰여진 후 Free로 마크되어 사용할 수 있는 상태로 되었거나 처음 Load 된 이후 내용이 변경되지 않아 사용 가능한 Buffer

   2. Dirty Buffer  : Datafile 에서 Buffer Cache 로 읽혀진 이후 블록에 변경사항이 발생했는데, 다시 Datafile Write 되지 않은 상태의 버퍼

   3. Pinned Buffer : 서버프로세스에 의해 사용된 상태의 버퍼

Dirty Buffer들은 오라클 프로세스들이 자신이 사용할 Free Buffer를 찾기 위해 LRU List를 꼬리 부분(LRU)부터 찾아나가다 Dirty Buffer를 만나면 이를 LRUW List에 옮겨놓은 것들로, Buffer들은 결국 DBWR(DB Writer)에 의해 디스크에 쓰여지고 다시 Free로 마크되어 LRU List로 가게 된다.


사업자 정보 표시
(주)블루원 | 김홍태 | 서울특별시 용산구 원효로 4가 135 금홍 2빌딩 | 사업자 등록번호 : 106-86-76684 | TEL : 02-3272-7200 | Mail : support_ora@blueone.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기

+ Recent posts