ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle] 오라클 DB 버퍼 캐시_(캐시 버퍼 LRU 체인)
    IT/etc 2022. 3. 30. 20:01

    캐시 버퍼 LRU 체인


    Hash Bucket Chain

    버퍼 헤더는 해시 체인 뿐 아니라 LRU 체인에 의해서도 연결돼 있다. DB 버퍼 캐시는 한번 읽은 데이터 블록을 캐싱해 두는 메모리 공간이지만 메모리는 유한한 자원이어서 모든 데이터를 캐싱할 수는 없는 일이다. 따라서 버퍼 캐시가 사용빈도가 높은 데이터 블록들 위주로 구성 될 수 있도록 LRU(Least recently used) 알고리즘을 사용해 관리된다. 모든 버퍼 블록 헤더를 LRU 체인에 연결해 사용빈도 순으로 위치를 옮겨가다가, Free 버퍼가 필요해질 때마나 액세스가 빈도가 낮은 데이터 블록들을 우선하여 밀어냄으로써 자주 액세스되는 블록들이 캐시에 더 오래 남아 있도록 관리한다.
    LRU 리스트에는 내부적으로 두 개의 리스트를 갖는다.
    *Dirty 리스트 :  캐시 내에서 변경됐지만, 아직 디스크에 기록되지 않은 Dirty버퍼 블록들을 관리하며, 'LRUW(LRU Write)리스트' 라고도 한다.
    *LRU 리스트 : 아직 Dirty 리스트로 옮겨지지 않은 나머지 버퍼 블록들을 관리한다.
     
    모든 버퍼 블록은 이 둘 중 하나에 반드시 속하지만 읽기 또는 쓰기 작업을 위해 액세스되는 동안에는 리스트에서 잠시 풀려나왔다가 다시 원래의 리스트로 연결되거나, 최초 변경이 발생하였을 대는 Dirty 리스트롱 옮겨간다. 참고로 LRU 리스트를 보호하기 위해 사용하는 래치를 cache buffer lru chain 래치라고 한다.
     
     

    ※ 오라클 아키텍처에 대해 다시 Remind 하기 위해 2009년에 발간된 "오라클 성능 고도화 원리와 해법1" 을  책장에서 꺼내어 블로그로 옮겨 보았다. 

Designed by Tistory.