2._DB_버퍼_캐시
2012.03.04 18:02
- 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로 연결한 구조 (실제 데이터 값은 버퍼 헤더에 있는 포인터에 의해 버퍼 블록을 찾아감)
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 : 읽기 혹은 변경을 위해 현재 액세스 되고 있는 버퍼 블록
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
66 | Front Page | 운영자 | 2012.02.21 | 131203 |
65 | 6._문장수준_읽기_일관성 | 정찬호 | 2012.03.12 | 57274 |
64 | 3._SQL트레이스 | sapius | 2012.04.04 | 26853 |
63 | 5._Undo | dasini | 2012.03.11 | 25074 |
62 | 2._SQL_처리과정 | dasini | 2012.04.06 | 21688 |
61 | 6._RAC_캐시_퓨전 | 남송휘 | 2012.05.21 | 17532 |
60 | 4._커서_공유 | 남송휘 | 2012.04.27 | 16112 |
59 | 5._오라클_Lock | 시와처 | 2012.03.26 | 12579 |
58 | 8._블록_클린아웃 | 시와처 | 2012.03.19 | 12015 |
57 | 4._동시성_구현_사례 [1] | dasini | 2012.03.27 | 11697 |
56 | 8._Statspack_AWR | 시와처 | 2012.04.01 | 11488 |
» | 2._DB_버퍼_캐시 | 시와처 | 2012.03.04 | 10432 |
54 | 10._대기_이벤트 | 박영창 | 2012.03.19 | 10373 |
53 | 9._Snapshot_too_old | 박영창 | 2012.03.19 | 9734 |
52 | 1._기본_아키텍처 | AskZZang | 2012.03.02 | 8350 |
51 | 7._세션_커서_캐싱 | 박영창 | 2012.04.22 | 7793 |
50 | 5._Direct_Path_IO | 남송휘 | 2012.05.21 | 7558 |
49 | 3._버퍼_Lock | 박영창 | 2012.02.24 | 7261 |
48 | 7._PLSQL_함수의_특징과_성능_부하 | 남송휘 | 2012.05.15 | 6642 |
47 | 10._V$SQL | 정찬호 | 2012.04.09 | 6544 |