본문 바로가기
IT 공부/SQL

[SQLP] DB 버퍼 캐시

by 해모해모 2024. 1. 15.
728x90
반응형

 

DB 버퍼캐시 : 사용자가 입력한 데이터를 데이터파일에 저장하고 이를 다시 읽는 과정에서 거쳐가는 캐시 영역(SGA 구성요소)

 

 

(1) 블록 단위 I/O : 오라클에서 I/O는 블록 단위로 이루어져 있음

- 블록 단위 처리(1) : 메모리 버퍼캐시 → 버퍼블록을 액세스할 경우

- 블록 단위 처리(2) :  데이터파일에 저장된 데이터 블록을 DB 버퍼 캐시로 적재할 경우

- 블록 단위 처리(3) :  캐시에서 변경된 블록을 다시 데이터파일에 저장할 경우

- DBWR 프로세스 : 버퍼 캐시로부터 변경된 블록(Dirty 버퍼 블록)을 주기적으로 데이터 파일에 기록하는 작업을 수행(성능향상을 위해 한 번에 여러 블록 처리)

- 블록 단위로 읽는다는 의미 : 하나의 레코드에서 하나의 컬럼만을 읽고자 하더라도 레코드가 속한 블록 전체를 읽게 됨을의미

 

(2) 버퍼 캐시 구조

- 해시 테이블 구조로 관리

- 데이터 블록을 해싱하기 위해 사용되는 키 값은 데이터 블록 주소(DBA, Data Block Address)

- 해시함수에 데이터 블록 주소를 입력해 리턴받은 해시 값이 같은 블록들을 같은 해시 버킷에 연결 리스트 구조로 연결하는 것

- 각각의 연결 리스트 : 해시 체인(Hash Chain)

- 찾고자 하는 데이터 블록 주소 → 해시 값으로 변환 → 해당 해시 버킷에서 체인을 따라 스캔 → 찾으면 바로 읽고, 못찾으면 디스크에서 해시 체인에 연결한 후 읽음

- 버퍼 헤더(Buffer Header)만 해시 체인에 연결되며, 실제 데이터 값이 필요해지면 버퍼 헤더에 있는 포인터를 이용해 다시 버퍼 블록을 찾아가는 구조

버퍼 캐시 구조

(3) 캐시 버퍼 체인

- 각 해시 체인은 래치(Latch)에 의해 보호됨

- DB 버퍼 캐시는 공유 메모리 영역인 SGA 내에 존재하므로 여러 프로세스에 의한 동시 액세스가 일어날 가능성이 크기 때문에, 같은 리소스에 대한 액세스를 직렬화(serialization)해야함 → 이를 위해 구현된 일종의 Lock 매커니즘을 래치(Latch)라고 부름

- 하나의 캐시 버퍼 체인 래치가 여러 개의 해시 체인을 동시에 관리

- 래치는 데이터 자체를 보호하는 게 아니라 SGA에 공유돼 있는 자료구조를 보호

- 그 중 캐시 버퍼 체인 래치는 버퍼 캐시에 연결된 체인구조를 보호(해시 체인을 스캔하거나 거기에 블록을 추가, 제거할 때 래치가 요구됨)

- 버퍼 헤더에 핀을 설정할 때도 캐시 버퍼 체인 래치 사용

 

(4) 캐시 버퍼 LRU 체인

- 버퍼 헤더는 해시 체인 뿐 아니라 LRU 체인에 의해서도 연결되어 있음

- 버퍼 캐시가 사용빈도가 높은 데이터 블록들 위주로 구성될 수 있도록 LRU(least recently used) 알고리즘을 사용해 관리

- LRU 리스트

 a. Dirty 리스트 : 캐시 내에서 변경됐지만, 아직 디스크에 기록되지 않은 Dirty 버퍼 블록들을 관리, LRUW(LRU Write) 리스트라고도 함

 b. LRU 리스트 : 아직 Dirty 리스트로 옮겨지지 않은 나머지 버퍼 블록들을 관리

- 모든 버퍼들은 LRU 리스트 중 하나에 반드시 속함

- 최초 변경이 발생하였을 때는 Dirty 리스트로 옮겨감

- LRU 리스트를 보호하기 위해 사용하는 래치를 캐시 버퍼 LRU 체인 래치라고 함

 

※ 버퍼 상태

모든 캐시 버퍼는 아래 세 가지 중 하나의 상태에 놓여있음

- Free 버퍼 : 인스턴스 기동 후 아직 데이터가 읽히지 않아 비어있는 상태(Clean 버퍼) 이거나, 언제든지 덮어 써도 무방한 버퍼 블록

- Dirty 버퍼 : 버퍼에 캐시된 이후 변경이 발생했지만, 아직 디스크에 기록되지 않아 데이터 파일 블록과 동기화가 필요한 버퍼블록

- Pinned 버퍼 : 읽기 또는 쓰기 작업을 위해 현재 액세스 되고 있는 버퍼 블록

728x90
반응형

'IT 공부 > SQL' 카테고리의 다른 글

[SQLP] Redo  (0) 2024.01.15
[SQLP] 버퍼 LOCK  (0) 2024.01.15
[SQLP] 오라클 기본아키텍처  (2) 2024.01.14
DBMS별 날짜 포맷 - Default 날짜/날짜 조회/날짜 변환  (0) 2023.08.24
DB2 SQL 에러 코드 정리(SQLCODE)  (0) 2023.08.24

댓글