2._DB_버퍼_캐시

조회 수 8711 추천 수 0 2012.03.06 22:49:07
시와처 *.7.24.53

  • DB Buffer Cache : 사용자 데이터를 읽고 쓰는 과정에서 사용 되는 SGA의 구성 요소 이다.

1. Block 단위 I/O

  • 오라클 I/O의 단위는 블록이다.
    • 메모리 버퍼 캐쉬에서 버퍼 블록을 액세스
    • 데이터 파일의 데이터 를 DB Buffer Cache로 적재
    • Dirty Buffer를 데이터 파일에 저장 
 

 I/O 속성

 설 명  

 Single Block read

- Index를 경우한 테이블 Access 

 Multi Block read

- Table Full Scan 

- DBWR의 Dirty Buffer 를 Data file 적재 작업

- 성능 향상을 위해 한버에 여러개의 블록을 읽어 들임 


※ Block 단위 I/O 는 SQL 성능의 척도 중 하나가 Block 의 개수임을 의미한다.


2. 버퍼 캐쉬구조

  • 해쉬 테이블구조로 관리
    • 해쉬 키 : 데이터 블록 주소 (DBA : Data Block Address)
    • 해쉬 함수 : DBA 를 입력해 해쉬 값 리턴
    • 해쉬 버켓 : 해쉬 함수에의해 리턴 받은 해쉬 값을 저장
    • 해쉬 체인  : 동일한 해쉬 값에 의한 버퍼 헤더를 Link List로 연결한 구조 (실제 데이터 값은 버퍼 헤더에 있는 포인터에 의해 버퍼 블록을 찾아감)

            1.jpg

 

3. 캐쉬 버퍼 체인

  • 해쉬 채인은 Latch에 의해 보호
  • cache buffers chains : 여러개의 해쉬 체인을 동시에 관리
    • 9i 부터 Shared Mode와 Exclusive Mode 로 관리
    • Shared Mode : 해쉬 체인을 스캔하여 필요한 블록 검색
    • Exclusive Mode : 체인 구조 변경 (체인 추가, 삭제) 혹은 Buffer Pin 설정시
  • _db_block_hash_buckets : 해쉬 버킷의 개수
  • _db_block_hash_latches : 해쉬 래취의 개수
  • 해쉬 버캣 : 해쉬 체인 = 1:1 을 목표 => 해쉬 체인을 찾고난후 추가적 스캔에 의한 비용을 최소화


4. 캐쉬 버퍼 LRU 체인

  • 유한한 자원인 메모리를 효율적으로 사용하기 위한 데이터 캐싱 기법으로 LRU(Least Recently Used) 알고리즘 사용
  • 캐쉬 버퍼는 LRU 체인에서도 관리 되어짐
  • LRU 알고리즘
    • 가장 최근에 사용한 Buffer Cache 를 MRU(Most Recently Used) End에 위치
    • Free Buffer 가 필요할 때 LRU(Least Recently Used) End 에 위치한 Buffer Cache부터 밀어냄
  • LRU List
    • Dirty List : Dirty Buffer Block 관리, LRUW (LRU Write) 리스트라고도 함
    • LRU List : Dirty List에 존재하지 않는 Block 관리 (Pinned Buffer,Free Buffer, Dirty List에 옮겨 가지 않은 Dirty Buffer)
    • 모든 Buffer Block는 둘중 하나에 반드시 속해 있다
    • LRU List를 보호 하기 위한 래치 : cache buffers lru chain
  • 버퍼 상태
    • Free Buffer : Instance 기동후 한번도 사용 하지 않은 버퍼 혹은 데이터를 사용 하였으나 변경되지 않았거나 변경후 데이터 파일과 동기화 되어 있는 상태
    • Dirty Buffer : 캐시된 후 데이터의 변경이 발생 되었으나 Data file에는 아직 기록되지 않은 상태
    • Pinned Buffer : 읽기 혹은 변경을 위해 현재 액세스 되고 있는 버퍼 블록