버퍼 캐시는 메모리 내에서 다음과 같은 중요한 역할을 수행한다.
빈 블록 찾기 (Locating free blocks): 새로 기록할 데이터를 담을 수 있는 빈 공간을 확보한다.
데이터 블록 찾기 (Finding data blocks): 읽기 작업을 위해 필요한 데이터가 메모리에 있는지 찾아낸다.
LRU 리스트 관리 (Managing LRU lists): 가장 오랫동안 사용되지 않은(Least Recently Used) 블록들을 밀어내며 메모리를 효율적으로 유지한다.
더티 버퍼 정리 (Cleaning dirty buffers): 변경되었지만 아직 디스크에 기록되지 않은 블록들을 정리한다.
이 이벤트는 프로세스가 데이터를 읽거나 쓰기 위해 빈 버퍼(Free Buffer)를 요청했으나, 가용한 버퍼가 없을 때 발생한다. 주요 원인은 다음과 같다.
A. DBWR의 작업 지연
현상: DBWR(데이터베이스 라이터) 프로세스가 더티 버퍼를 디스크에 기록하여 캐시 공간을 비워주지 못할 때 발생한다.
메커니즘: 더티 버퍼가 디스크에 완전히 기록되기 전까지는 해당 공간을 재사용할 수 없으므로, 기록 작업이 끝날 때까지 프로세스는 대기 상태에 빠지게 된다.
B. 세션당 Pin된 버퍼의 수
한 세션에서 동시에 고정(Pin)해서 사용할 수 있는 버퍼의 개수 제한 때문에 발생하기도 한다.
C. LRU 리스트 스캔 임계치 초과
과정: 사용자 프로세스(Foreground Process)는 빈 버퍼가 필요할 때마다 LRU 리스트를 뒤진다.
임계치(Threshold): 리스트를 일정 수준(임계치)까지 뒤졌는데도 빈 버퍼를 찾지 못하면, 사용자 프로세스는 스캔을 멈춘다.
DBWR 신호 전달: 이때 프로세스는 DBWR에게 "더티 버퍼를 빨리 비워서 공간을 만들어달라"고 요청한다.
대기 발생: 하지만 이 시점에 DBWR이 다른 작업으로 너무 바빠서 즉시 공간을 만들어주지 못하면, 사용자 프로세스는 Free Buffer Wait 이벤트를 겪으며 멈추게 된다.

결국 Free Buffer Wait는 공간이 없어서 DBWR 백그라운드 프로세스에게 "공간을 비워줘!"라고 외치며 기다리는 상황이다.
이 문제가 자주 발생한다면 다음 두 가지를 의심해봐야 한다.
I/O 성능 저하: DBWR이 디스크에 쓰는 속도가 너무 느린 경우.
버퍼 캐시 크기 부족: 전체 방 개수(메모리) 자체가 너무 적어서 금방 꽉 차버리는 경우.

오라클은 내부적으로 알고리즘을 사용하여 LRU 리스트를 유지한다. 이 리스트는 LRU 체인에 의해 관리되며, 체인의 각 노드는 메모리 내의 정확한 데이터 블록을 가리킨다.
동작 원리: 데이터가 필요할 때 이 체인을 따라가서 블록의 위치를 찾고, 사용 빈도에 따라 블록의 우선순위를 조정한다.

단일 세트의 체인에 너무 많은 블록을 매달아 관리하면, 여러 프로세스가 동시에 체인을 뒤지려 할 때 LRU 래치 경합이 발생한다. 이를 해결하기 위해 오라클은 다음과 같은 방식을 사용한다.
복수 세트 유지: 하나의 거대한 리스트 대신, 여러 개의 리스트 세트(Sets)를 병렬로 유지하여 래치 점유를 분산시킨다.
_db_block_lru_latches: LRU 래치의 개수를 결정하는 내부 파라미터이다.
X$KCBWDS (Set Descriptor): 각 워킹 세트(Working Set)에 대한 상세 정보를 담고 있는 내부 고정 테이블이다.
자동 계산: 오라클은 시스템의 CPU 개수를 기반으로 최적의 래치 개수를 내부적으로 계산하여 할당한다.
LRU 리스트 관리와 관련된 병목 현상을 해결하기 위한 튜닝 포인트는 다음과 같다.
데이터 블록 증가: 더 많은 데이터를 수용할 수 있도록 관리 구조를 최적화한다.
DBWR 프로세스 증설: DB_WRITER_PROCESSES 파라미터를 조절하여 더티 버퍼를 디스크에 기록하는 속도를 높인다. DBWR이 빨리 비워줘야 LRU 리스트에 빈 공간(Free Buffer)이 확보된다.
버퍼 캐시 크기 확대: DB_CACHE_SIZE 등을 늘려 전체적인 메모리 공간을 확보함으로써, 블록이 자주 밀려나지 않도록(Aging out) 관리한다.
결국 이 모든 구조는 "줄을 짧게 만들고, 창구를 늘리는 것"이 핵심이다. 리스트가 너무 길면 찾는 데 오래 걸리고, 리스트가 하나뿐이면 줄을 서야 하기 때문이다.