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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
46 | 9._Static_vs._Dynamic_SQL | 남송휘 | 2012.05.07 | 5426 |
45 | 2._User_Call_vs._Recursive_Call | 정찬호 | 2012.05.07 | 4427 |
44 | 1._Call_통계 | 정찬호 | 2012.05.07 | 4310 |
43 | 5장._데이터베이스_Call_최소화_원리 | 운영자 | 2012.05.07 | 4321 |
42 | 11._Static_SQL_구현을_위한_기법들 | dasini | 2012.05.07 | 3736 |
41 | 4._커서_공유 | 남송휘 | 2012.04.27 | 16112 |
40 | 6._바인드_변수의_부작용과_해법 | 시와처 | 2012.04.23 | 4645 |
39 | 5._바인드_변수의_중요성 | 시와처 | 2012.04.23 | 4299 |
38 | 8._애플리케이션_커서_캐싱 | 박영창 | 2012.04.22 | 5243 |
37 | 7._세션_커서_캐싱 | 박영창 | 2012.04.22 | 7793 |
36 | 10._V$SQL | 정찬호 | 2012.04.09 | 6544 |
35 | 9._ASH(Active_Session_History) | 정찬호 | 2012.04.09 | 6071 |
34 | 4장._라이브러리_캐시_최적화_원리 | dasini | 2012.04.09 | 2721 |
33 | 12._데이터베이스_성능_고도화_정석_해법 | 남송휘 | 2012.04.09 | 4574 |
32 | 11._End-To-End_성능관리 | 남송휘 | 2012.04.09 | 3032 |
31 | 3._라이브러리_캐시_구조 | dasini | 2012.04.06 | 5232 |
30 | 2._SQL_처리과정 | dasini | 2012.04.06 | 21688 |
29 | 1._SQL과_옵티마이저 | dasini | 2012.04.06 | 3612 |
28 | 5._V$SYSSTAT | AskZZang | 2012.04.04 | 4599 |
27 | 4._DBMS_XPLAN_패키지 | AskZZang | 2012.04.04 | 5612 |