메모리 구조중급Oracle 전용
Buffer Cache (Database Buffer Cache)
SGA 내부의 데이터 블록 캐시. 디스크 I/O를 줄이는 핵심
정의
SGA에 위치한 메모리 영역으로, 데이터 파일에서 읽어온 블록을 캐싱한다. SQL이 블록을 요청하면 먼저 Buffer Cache를 확인(logical read)하고, 없으면 디스크에서 가져온다(physical read). LRU 알고리즘 기반으로 관리되며, 변경된 블록은 Dirty Buffer로 표시되고 DBWR가 비동기로 디스크에 기록한다.
왜 중요한가?
성능의 8할이 여기서 결정된다. Physical Read는 Logical Read보다 수십~수백 배 느리다. Buffer Cache가 작거나, 비효율적 SQL이 캐시를 오염시키면 Physical Read가 폭증한다.
틀리기 쉬운 포인트
- !Hit Ratio만 보고 판단하지 말 것. 절대 Physical Read 수도 봐야 합니다.
- !큰 Full Scan 한 번이 캐시를 오염시킬 수 있습니다.
- !변경 블록은 즉시 디스크에 쓰이지 않고 DBWR가 비동기 기록.
예시
-- Hit Ratio 확인 SELECT 1 - (phy.value / (cur.value + con.value)) AS hit_ratio FROM v$sysstat cur, v$sysstat con, v$sysstat phy WHERE cur.name = 'db block gets' AND con.name = 'consistent gets' AND phy.name = 'physical reads';
성능 포인트
!Hit Ratio가 95%여도 절대 Physical Read 수가 크면 성능 문제다. 비율이 아니라 절대값과 SQL별 분포를 보라.