반응형
SQL 문장 실행
↓
버퍼캐시에 결과 값들을 가지는 오라클 블록이 존재하는지 확인
↓
블록이 데이터 버퍼 캐시에 존재하면 거기서 읽어옴
만약 없다면 디스크에서 I/O를 발생시키며 읽어옴
## 버퍼 자체의 상태
- Free
- 아직 사용하지 않고 있는 버퍼로서 언제든지 사용가능한 버퍼
- Free Buffer는 오라클 서버 프로세스에 할당되어 사용되고, 사용 후 Dirty Buffer가 된 Buffer들은 DBWR에 의해 디스크에 쓰여진 후 다시 Free Buffer가 되어 오라클 서버 프로세스에 의해 재사용되는 작업을 반복
- Dirty
- 데이터베이스 버퍼 캐시에서 변경되어 디스크로 내려 적히기를 기다리는 버퍼,
- 이후 체크 포인트 대상 버퍼
- Pinned
- 해시 버퍼로부터 버퍼 락을 획득하고 현재 작업 중인 버퍼, 버퍼 락을 반환할 때까지 Pinned 상태유지
- Clean
- 이미 사용된 적이 있지만 지금은 Read consistent 버전의 이미지를 가지고 있는 버퍼
- 디스크에 있는 블록 이미지와 동일한 블록 이미지를 의미
※ read consistent : 가장 최근에 커밋된 데이터를 보여주는 것
## 버퍼 읽기 쓰기 시점에 따른 버퍼의 상태
- Consistent Mode Get
- 커밋되지 않은 트랜잭션이 두 개의 로우를 변경하는 동안 다른 프로세스가 읽기 요청이 들어오게 되면 변경된 버퍼 이미지가 아닌 읽기 요청이 들어온 바로 그 시점에서의 데이터를 돌려줘야 함
- 언두 데이터를 생성하여 새로운 버퍼를 생성하고 이 버퍼를 돌려줌
- Current Mode Get
- 커밋되지 않은 트랜잭션이 두 개의 로우를 변경하는 동안 다른 프로세스가 쓰기(Update, Delete) 요청이 들어오게 되면 트랜잭션이 커밋되지 않은 버퍼를 돌려줘야 함
- 변경된 데이터 블록 이미지를 돌려줌
## 데이터베이스 버퍼 캐시 영역 구성 방법
세종류의 Pool을 사용함
- Default 버퍼 풀 (db_cache_size)
- SGA 내부에 구성하는 기본 데이터베이스 버퍼 캐시 영역
- Keep 버퍼 풀 (db_keep_cache_size)
- 자주 재사용 되는 블록들을 저장하려는 경우 추가적으로 생성하는 부분
alter table scott.emp
storage(buffer_pool keep);
- Recycle 버퍼 풀(db_recycle_cache_size)
- 언제든지 제거 되어 재사용 될 수 있는 공간
- 자주 재사용되지 않는 데이터 블록을 임시적으로 저장하게 될 공간을 설정해주는 개념
- ex. 풀스캔을 수행해야 할 때 자주 사용되지 않는 블록들도 불러지니, 이상황에서 default 버퍼 풀 대신 Recycle 버퍼 풀을 사용하여 임시적으로 공간을 설정해줌
alter table scott.emp
storage(buffer_pool recycle);
반응형
'ORACLE > ORACLE_Admin' 카테고리의 다른 글
Undo 테이블스페이스, Redo Log 파일 (0) | 2023.04.17 |
---|---|
ORACLE 파라미터 파일 | alter system, session (0) | 2023.04.16 |
ORACLE Checkpoint (0) | 2023.04.16 |
ORACLE Alert 로그 확인 | Trace 파일 (0) | 2023.04.13 |
ORACLE 구동 및 종료 (0) | 2023.04.11 |