DB 버퍼캐시
(1) 블록 단위 I/O
오라클에서 I/O는 블록 단위로 이루어진다.
블록 단위로 읽는 다는 의미는, 하나의 레코드에서 하나의 컬럼만을 읽고자 하더라도 레코드가 속한 블록 전체를 읽게 됨을 의미한다. SQL 성능을 좌우하는 가장 중요한 성능 지표는 액세스하는 블록 개수이다.
(2) 버퍼 캐시 구조

DBA : DB 버퍼 캐시 내에서 데이터 블록을 해싱하기 위해 사용되는 키 값
해시 함수에 DBA를 입력해 리턴 받은 해시 값이 같은 블록들을 해시 버킷의 해시 체인을 통해 구현
DB 버퍼 액세스 순서
1. DBA 해싱
2. 해시 버킷 액세스
3. 해시 체인(버퍼 헤더) 액세스
4-1. 없으면 File Read 후 해시 체인에 연결 후 읽음
4-2. 있으면 바로 읽음
(3) 캐시 버퍼 체인
DB 버퍼 캐시는 공유 메모리 영역인 SGA 내에 존재하므로 여러 프로세스에 의한 각 해시 체인에 대한 동시 액세스를 Latch를 통해 직렬화 한다. 래치를 획득한 프로세스만이 그 래치에 의해 보호되는 자료구조로의 진입이 허용된다.
위의 그림 처럼 chache bufferes chains 래치 : 해시체인은 1:N 구조이다.
데이터 자체 보호가 아닌 SGA 공유된 자료구조를 보호하는 것이고 해시 체인 스캔하거나 블록 추가, 제거 시 래치가 요구된다.
읽기 전용 작업 (select 문이 아닌 해시 체인 스캔하며 블록찾는 작업) 일 때는 Share 모드획득하지만, 그 외의 작업은 래치 경합이 발생한다.
(4) 캐시 버퍼 LRU 체인
버퍼 헤더는 해시 체인 뿐 아니라 LRU 체인에 의해서도 연결돼 있다. 버퍼 블록 헤더를 사용빈도순으로 위치를 옮겨가다가, Free 버퍼가 필요해질 때마다 액세스 빈도가 낮은 데이터 블록들을 우선하여 밀어낸다.
정리하자면
DB 버퍼 체인은
1. cache buffers chains 래치을 통해 SGA의 액세스를 직렬화하고
2. cache bufferes lru chains 래치를 통해 자주 사용하는 블록을 SGA에 보존한다.
버퍼 Lock
(1) 버퍼 Lock(Pinned)
아주 짧은 순간일지라도 두개 이상의 프로세스가 동시에 버퍼 내용을 읽고 쓰는 것을 막기 위해 프로세스는 먼저 버퍼 헤더로부터 버퍼 Lock을 획득해야 한다. 보통은 래치 획득을 두번하지만, 몇몇 오퍼레이션에선 래치를 쥔채 버퍼 블록을 읽는 경우도 있다.
1. 래치 획득
2. 타 프로세스가 버퍼 Lock 획등 중
3. 버퍼 Lock Waiter List 등록(buffer busy waits event 발생)
4. 래치 해제
5. 타 프로세스 버퍼 Lock 해제 시 버퍼 Lock 획득
6. 데이터 읽고 쓰기
7. 래치 획득
8. 버퍼 Lock 해제
9. 래치 해제
(2) 버퍼 핸들
버퍼 Lock을 설정하는 것은 자신이 현재 그 버퍼를 사용중임을 표시해두는 것. 버퍼 핸들도 공유된 리소스이므로 또 다른 래치인 cache buffer handles 래치 사용 버퍼를 Pin하는 오페레이션이 많은 수록 cache buffer nadles 래치가 경합지점이 되기 떄문에 프로세스 당 _db_handles_cached 개수만큼 버퍼 핸들을 미리 할당한다.
읽기 작업을 위해서라면 여러 개 프로세스가 동시에 Pin 설정이 가능하지만, 변경 시에는 하나의 프로세스만 Pin 설정이 가능하다.
(3) 버퍼 Lock의 필요성
DML Lock과 별개로 Block 단위 Lock을 걸기위해 존재한다. 로우가 달라도 블록은 같은 경우도 존재하고, 이럴 때 두개의 프로세스가 동시에 블록에 접근하면 데이터 정합성이 깨지기 때문에 이를 버퍼 Lock으로 직렬화한다.
(4) 버퍼 Pinning
데이터베이스 Call 진행 시 버퍼 Pinning 유지 시 같은 블록 읽을 때 래치 획득 과정을 생략을 통해 논리적 블록 읽기 횟수를 감소시킨다. 재방문 가능성이 큰 오퍼레이션을 수행할 때만 사용한다.
1. 인덱스 리프 블록 Pin 이후 테이블 블록 방문
2. 인덱스 클러스터링 팩터가 좋으면 테이블 블록에 Pin
3. NL Join 시 Inner Table Index Root 블록에 Pin
4. Index Skip Scan 시 브랜치 블록에 Pin
5. DML 수행 시 Undo 블록 Pin
출처
https://product.kyobobook.co.kr/detail/S000061696047
오라클 성능 고도화 원리와 해법 1 | 조시형 - 교보문고
오라클 성능 고도화 원리와 해법 1 | 초 대용량 데이터베이스 환경의 여러 차세대 시스템 구축 프로젝트에서 얻은 소중한 경험과 기술 노하우를 널리 전파하기 위해 만든 책이다. 데이터베이스
product.kyobobook.co.kr