[아이티윌 오라클 DBA 과정 91기] 260122 TIL
2026. 1. 29. 09:17ㆍCourses/아이티윌 오라클 DBA 과정
Index

Database(Data) Buffer Cache
- 데이터 파일에서 읽은 데이터 블록의 복사본을 저장하는 메모리 영역
- 오라클은 물리적 I/O를 최소화하기 위해 최근에 사용된 블록을 메모리의 일정한 영역에 보관
예) select * from hr.employees where employee_id = 100;

execute
- library cache lock과 pin을 shared mode로 변환
- block I/O 발생 : 찾고자 하는 row가 존재하는 블록을 데이터 버퍼 캐시에 있는지 실행 계획을 통해 찾음
- 실행 계획 : emp_emp_id_pk 를 index unique scan
- index root block을 찾음, root DBA (#file(3), #block(31283))
- emp_emp_id_pk 인덱스 세그먼트 헤더 블록 다음 블록이 무조건 root block
- brach block dba 찾음
- leaf block dba 찾음
- 실제 데이터가 있는 블록 찾음
SYS@ora19c> select header_file, header_block
from dba_segments
where segment_name = 'EMP_EMP_ID_PK';
HEADER_FILE HEADER_BLOCK
----------- ------------
3 31282
- 요청 블록의 DBA(Data Block Address, #file, #block)와 Block Class(블록 종류)에 대해 해시 함수를 적용한 결과를 이용해서 hash bucket을 찾음
# block class 조회
SYS@ora19c> select class from v$waitstat;
CLASS
------------------
data block
sort block
save undo block
segment header
save undo header
free list
extent map
1st level bmb
2nd level bmb
3rd level bmb
bitmap block
bitmap index block
file header block
unused
system undo header
system undo block
undo header
undo block
18 rows selected.
- hash bucket에는 같은 해시 값을 갖는 buffer header들이 체인(chain) 형태로 구성되어 있음
- buffer header에는 버퍼의 메타 정보(DBA(#file, #block))를 가지고 있으며, 버퍼 메모리 영역의 실제 위치 정보를 가지고 있음
- hash bucket은 shared pool에서 관리
- 해시 값에 해당하는 hash bucket을 검색하기 위해서는
cache buffers chains latch를 획득해야 함 - 이 때 latch에 경합이 발생할 경우
latch: cache buffers chains대기 이벤트 발생
cache buffers chains latch 수
SYS@ora19c> select count(*) from v$latch_children where name = 'cache buffers chains';
COUNT(*)
----------
1024
SYS@ora19c> col parameter format a30
SYS@ora19c> select a.ksppinm parameter, b.ksppstvl value
from x$ksppi a, x$ksppcv b
where a.indx = b.indx
and a.ksppinm = '_db_block_hash_latches'; 2 3 4
PARAMETER VALUE
------------------------------ ------------------------------
_db_block_hash_latches 1024
hash bucket 수
SYS@ora19c> select a.ksppinm parameter, b.ksppstvl value
from x$ksppi a, x$ksppcv b
where a.indx = b.indx
and a.ksppinm = '_db_block_hash_buckets'; 2 3 4
PARAMETER VALUE
------------------------------ ------------------------------
_db_block_hash_buckets 32768
- 하나의 latch가 담당하는 bucket 수 : 32768 / 1024 = 32
hash bucket을 보호하는 cache buffers chains latch
- 읽기 작업 : shared mode
- 쓰기 작업 : exclusive mode
- 이 과정에서 경합이 발생하면
latch : cache buffers chains
물리적 I/O 발생
- access하려는 블록이 데이터 버퍼 캐시에 없을 경우 물리적 I/O 발생
- working set을 관리하는
cache buffers lru chain latch를 획득해야 함 - 이 과정에서 경합이 발생하면
latch: cache buffers lru chain대기 이벤트 발생 - LRU List의 보조 리스트에서 free buffer를 찾음
- 만약에 보조 리스트에 free buffer가 없을 경우 메인 리스트 cold 영역 제일 뒤에서부터 free buffer를 찾음
- 찾는 도중에 touch count가 1 이하인 버퍼가 free buffer로 사용될 수 있음
- 만약에 찾는 도중에 touch count가 2 이상인 버퍼를 만나면 hot 영역 앞으로 옮기고 해당 버퍼 touch count는 0으로 초기화시킴
- free buffer를 찾게 되면 해당 버퍼에 대해 buffer lock을 exclusive 모드로 획득하고 데이터 파일에서 블록을 해당 위치로 읽어 들임
working set
- 데이터 버퍼 캐시 관리
- LRU(Least Recently Used) List
- 가장 최근에 사용되거나 사용하지 않은 버퍼들의 리스트
- free buffer, 사용 중이거나 사용된 버퍼, 아직 LRUW 리스트로 옮겨지지 않은 dirty block
- 메인 리스트 : 사용된 버퍼들의 리스트
- 보조 리스트 : free buffer list, 미사용된 buffer, dbwr에 의해 기록된 버퍼들의 리스트
- LRUW(Least Recently Used Write) List, Dirty List
- 아직 데이터 파일로 기록되지 않은 변경된 버퍼(dirty buffer)들을 관리하는 리스트
- 메인 리스트 : 변경된 buffer들의 리스트
- 보조 리스트 : 현재 dbwr에 의해 기록 중인 버퍼들의 리스트(partial checkpoint 시 이 부분만 봐도 됨)
LRU 알고리즘

'Courses > 아이티윌 오라클 DBA 과정' 카테고리의 다른 글
| [아이티윌 오라클 DBA 과정 91기] 260127 TIL (0) | 2026.01.29 |
|---|---|
| [아이티윌 오라클 DBA 과정 91기] 260126 TIL (0) | 2026.01.29 |
| [아이티윌 오라클 DBA 과정 91기] 260121 TIL (1) | 2026.01.21 |
| [아이티윌 오라클 DBA 과정 91기] 260120 TIL (1) | 2026.01.20 |
| [아이티윌 오라클 DBA 과정 91기] 260119 TIL (0) | 2026.01.20 |