SGA - Database Buffer Cache
Database Buffer Cache란? Data File에서 읽은 Data Block의 복사본을 Temporarily caching하는 Memory 영역.


Buffer Cache의 사용 목적
· Optimize physical I/O
Database는 Cache의 Data Blocks을 Update하고 Redo log Buffer의 변경 사항에 대한 Metadata를 저장합니다. COMMIT 후에 Database는 Redo log Buffer에 바로 Write하지만, Data Block을 Data File에 즉시 Write하지 않습니다.(Deferred Write)
· 자주 액세스하는 블록을 버퍼 캐시에 Keep, 자주 액세스하지 않는 블록을 Disk에 Write
Solaris / Oracle Linux에서는 Smart Flash Cache를 enable하여, Buffer Cache의 일부가 Flash Cache에 상주할 수 있습니다.
Buffer States
Database는 내부 알고리즘을 사용하여 Buffer Cache를 관리합니다.
· Unused
사용된 적이 없거나 현재 사용되지 않는 상태로, 즉시 사용할 수 있는 상태입니다.
· Clean
이전에 사용된 적이 있으며, 지금은 특정 시점에서 read-consistent 버전의 블록을 포함합니다. 즉, 블록에 데이터가 포함되어 있지만 체크포인트가 필요하지 않는 Clean한 상태입니다. Clean 상태의 블록은 pin하고 재사용 할 수 있습니다.
· Drity
아직 Disk에 Write되지 않은 수정된 데이터가 포함되어 있어, 재사용하려면 체크포인트가 필요합니다.
이러한 모든 버퍼에는 pinned/free(unpinned)의 액세스 모드가 있습니다.
Buffer Modes
Client가 데이터를 요청하면 Database는 Database Buffer Cache의 Buffer(Current Mode 또는 Consistent Mode)를 찾습니다.
· Current Mode
현재 버퍼 캐시에 나타나는 블록을 검색하는 것.
· Consistent Mode
Read-consistent 버전의 블록을 검색하는 것. Undo 데이터 이용.
Buffer Pools
Database Buffer Cache는 블록을 관리하는 하나 이상의 Buffer Pool로 나뉩니다.
또한 용도 별로 사용 할 별도의 Buffer Pool을 수동으로 구성할 수 있습니다. 예를 들어, 블록이 캐시에서 만료되는 방식을 제어하도록 Segments를 Hot, Warm, Cold Buffer Pool로 분리할 수 있습니다.
· Default Pool
일반적으로 블록이 캐시되는 위치입니다. 별도의 풀을 수동으로 구성하지 않는 한 Default Pool이 유일한 Buffer Pool입니다.
· Keep Pool
자주 액세스했지만 공간 부족으로 인해 Default Pool에서 만료된 블록을 위한 공간입니다. Keep Buffer Pool의 목적은 메모리에 object를 유지하여 I/O가 발생하지 않도록 하는 것입니다.
· Recycle Pool
드물게 사용되는 블록을 위한 곳입니다. Object가 캐시에서 불필요한 공간을 소비하는 것을 방지하기 위해 사용됩니다.
Database Concepts
This chapter discusses the memory architecture of a database instance.
docs.oracle.com