study:oracle:adv_owi_10g:oracle_internal_owi
문서의 이전 판입니다!
Buffer Cache 란
오라클은 물리적인 I/O를 최소화 하기 위해 최근에 사용된 블럭에 대한 정보를 메모리의 일정 부분에 보관하려 한다 ⇒ 이 영역을 Buffer Cache 라고함.
Buffer Cache 구조
Hash Chain 구조의 시작점은 Hash Table인데, Hash Table은 Hash Bucket으로 구성되어져 있다
오라클 블럭(DBA: Data Block Address File# , Block# )과 블럭 클래스 에 대한 Hash 함수 결과 값으로 해당 Hash Bucket을 찾아가서 해당 데이터 블럭이 메모리에 존재 하는지를 확인 할 수 있는 것 이다
Hash Bucket에 딸린 Buffer Header는 Buffer에 대한 메타 정보만 가지고 있고 Buffer 메모리 영역의 실제 버퍼에 대한 포인터 값을 가지고 있다.
Hash Chain 구조는 Shared Pool 영역에 존재 하며 실제 버퍼에 대한 정보들은 버퍼 캐쉬 영역에 존재 한다
특정 블럭에 대한 Scan을 할려고 하면 Cache buffer chains latch를 획득 해야만 한다.
※ 9i부터 읽기 작업에 한하여 buffer cache chains latch를 shared 모드로 획득 한다
다음과 같은 쿼리를 이용하여 cache buffer chains latch의 갯수를 확인가능 하다
SELECT COUNT(*) FROM v$latch_children WHERE name = 'cache buffers chains'
Working Set
LRU List : 가장 최근에 사용되거나 미사용된 버퍼들의 List
Free(미사용) , 사용중이거나 사용된 버퍼 아직 LRUW로 옮겨지지 않은 Dirty 버퍼
메인 리스트 : 사용된 버퍼들의 리스트 , 핫 영역과 콜드 영역으로 구분 관리 됨
보조 리스트 : 프리 버퍼들의 리스트 , 미사용 된 버퍼나 DBWn에 의해 기록 된 버퍼 관리
LRUW List : 아직 디스크에 기록 되지 않은 Dirty한 버퍼들의 List
메인 리스트 : 변경된 버퍼들의 리스트
보조 리스트 : 현재 DBWR에 의해 기록중인 버퍼 리스트
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.1248879958.txt.gz · 마지막으로 수정됨: 2009/07/30 00:05 저자 deathguy