사용자 도구

사이트 도구


study:oracle:adv_owi_10g:oracle_internal_owi

문서의 이전 판입니다!


Buffer Cache 란

  1. 오라클은 물리적인 I/O를 최소화 하기 위해 최근에 사용된 블럭에 대한 정보를 메모리의 일정 부분에 보관하려 한다 ⇒ 이 영역을 Buffer Cache 라고함.

Buffer Cache 구조

  1. Hash Chain 구조의 시작점은 Hash Table인데, Hash Table은 Hash Bucket으로 구성되어져 있다
  2. 오라클 블럭(DBA: Data Block Address File# , Block# )과 블럭 클래스 에 대한 Hash 함수 결과 값으로 해당 Hash Bucket을 찾아가서 해당 데이터 블럭이 메모리에 존재 하는지를 확인 할 수 있는 것 이다
  3. Hash Bucket에 딸린 Buffer Header는 Buffer에 대한 메타 정보만 가지고 있고 Buffer 메모리 영역의 실제 버퍼에 대한 포인터 값을 가지고 있다.
  4. Hash Chain 구조는 Shared Pool 영역에 존재 하며 실제 버퍼에 대한 정보들은 버퍼 캐쉬 영역에 존재 한다
  5. 특정 블럭에 대한 Scan을 할려고 하면 Cache buffer chains latch를 획득 해야만 한다.
    ※ 9i부터 읽기 작업에 한하여 buffer cache chains latch를 shared 모드로 획득 한다
  6. 다음과 같은 쿼리를 이용하여 cache buffer chains latch의 갯수를 확인가능 하다
    SELECT COUNT(*) FROM v$latch_children WHERE name = 'cache buffers chains'

Working Set

  • 오라클은 Buffer Cache에 대하여 효율적으로 사용하기 위해 두 종류의 LRU리스트를 사용한다.
  1. LRU List : 가장 최근에 사용되거나 미사용된 버퍼들의 List
    1. Free(미사용) , 사용중이거나 사용된 버퍼 아직 LRUW로 옮겨지지 않은 Dirty 버퍼
    2. 메인 리스트 : 사용된 버퍼들의 리스트 , 핫 영역과 콜드 영역으로 구분 관리 됨
    3. 보조 리스트 : 프리 버퍼들의 리스트 , 미사용 된 버퍼나 DBWn에 의해 기록 된 버퍼 관리
  2. LRUW List : 아직 디스크에 기록 되지 않은 Dirty한 버퍼들의 List
    1. 메인 리스트 : 변경된 버퍼들의 리스트
    2. 보조 리스트 : 현재 DBWR에 의해 기록중인 버퍼 리스트

LRU , LRUW를 합쳐서 하나의 Working Set 이라고 부른다. Working Set 개수는 Cache buffer lru latch 개수에 의해 결정( 하나의 working set을 하나의 lru latch가 관리함 )되며 X$KCBWDS( Kerner Cache Buffer Working sets Descriptors )를 조회 하면 확인 가능 LRU , LRUW List를 탐색 하고자 하는 프로세스는 반드시 cache buffer lru chain latch를 획득 해야 함.

study/oracle/adv_owi_10g/oracle_internal_owi.1248879818.txt.gz · 마지막으로 수정됨: 2009/07/30 00:03 저자 deathguy