카테고리 없음

Data Buffer Cache

잇꼬 2024. 2. 5. 23:21
728x90
반응형
SMALL

■ Data Buffer Cache
- database 에서 읽어 들인 block 을 메모리에 올려 놓은 영역
- 물리적인 I/O 를 최소화하기 위한 메모리영역

 

SELECT문 처리 과정


1. parse 단계

- 구문 분석, 실행 계획을 수립


2. bind 단계

- SQL 문장 내의 바인드 변수 와 실제값이 연결

 

3-1. execute 단계
- library cache lock 과 library cache pin 이 'shared mode'로 변환하고 SQL문을 실행한다.

→ 실행되는 동안 해당 SQL 문장에 대한 실행 계획을 따라가게 된다. 

3-2. 실행 계획 수립 및 데이터 블록 접근

- SQL 문장의 실행 계획을 통해 필요한 데이터 블록에 접근한다.
- 필요한 블록의 `DBA(Data Block Address)`와 `Block class`(블록의 종류) 등에 대한 정보를 해시 함수를 이용하여 해시 값으로 변환한다.

- 이 해시 값에 해당하는 해시 버킷을 찾아서 해당 버킷을 관리하는 `shared pool`에서 현재 `data buffer cache`에 올라온 블록의 정보를 확인한다.

3-3. Latch 획득

- 해시 값에 해당하는 해시 버킷을 검색하기 위해서는 해당 버킷을 관리하는 데이터 구조에 접근해야 한다.

→  다른 세션이 이미 해당 데이터 구조에 대한 락(latch)을 획득한 경우에는 기다려야 함.

- `latch : cache buffers chains`는 이러한 상황에서 발생하는 이벤트로, 다수의 세션이 동시에 같은 자원을 사용하려고 할 때 경합이 발생하는 것을 나타낸다.

 

4. fetch 단계

- 실행 계획을 따라 데이터 블록에 접근하고 필요한 데이터를 가져오는 단계
- 최종적으로 사용자에게 요청한 데이터가 반환되어 결과 집합이 형성된다.

 

#) latch_children 중 'cache buffer chains'  확인

select count(*) from v$latch_children where name = 'cache buffers chains';


#) 현재 latch 의 수

SELECT    a.ksppinm  Parameter, b.ksppstvl Session_Value, c.ksppstvl  Instance_Value
FROM   x$ksppi a,   x$ksppcv b,   x$ksppsv c
WHERE   a.indx = b.indx
AND   a.indx = c.indx
AND   a.ksppinm = '_db_block_hash_latches';


#) 현재 bucket의 수 

SELECT    a.ksppinm  Parameter, b.ksppstvl Session_Value, c.ksppstvl  Instance_Value
FROM   x$ksppi a,   x$ksppcv b,   x$ksppsv c
WHERE   a.indx = b.indx
AND   a.indx = c.indx
AND   a.ksppinm = '_db_block_hash_buckets';


※ 하나의 latch 담당하는 bucket 수는 65536 / 2048 = 32

728x90
반응형
LIST