OracleDB/Concept

SGA - Database Buffer Cache

대끄블 2023. 7. 10. 08:53

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

Oracle Database Memory Structures

 

Database Buffer Cache

 

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가 캐시에서 불필요한 공간을 소비하는 것을 방지하기 위해 사용됩니다.

 

참고: https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/memory-architecture.html#GUID-4FF66585-E469-4631-9225-29D75594CD14

 

Database Concepts

This chapter discusses the memory architecture of a database instance.

docs.oracle.com