프로잉2 2025. 6. 6. 17:25
728x90

3.1 버퍼 락의 필요성

오라클은 다수의 프로세스가 동시에 같은 데이터 블록을 읽고/쓰는 상황에서도 데이터 무결성과 동기화를 보장해야 한다. 만약 여러 프로세스가 동일한 버퍼를 변경한다면, 데이터 손상이나 충돌이 발생할 수 있다. 이를 방지하기 위해, 오라클은 Buffer Lock이라는 내부 락 메커니즘을 제공한다.

🔐 동시 접근 방지

  • 프로세스가 캐시된 버퍼 블록을 읽거나 변경하려면 먼저 해당 블록의 Buffer Lock을 획득해야 한다.
  • 버퍼 내용을 읽을 때는 Shared 모드, 변경할 때는 Exclusive 모드로 락이 설정된다.

🧠 이는 파일 시스템에서 읽기/쓰기 락을 거는 것과 유사하다.


3.2 버퍼 락 획득 과정

  1. 해시 체인 래치 획득: 버퍼를 찾기 위해 먼저 해시 버킷을 따라가는 체인 구조 접근 시 래치를 사용.
  2. 버퍼 블록 탐색: 요청 블록을 체인에서 탐색.
  3. 버퍼 락 확인:
    • 이미 다른 프로세스가 Buffer Lock을 Exclusive 모드로 점유 중이라면,
    • 현재 프로세스는 버퍼 락 대기자 목록에 등록되어 대기한다.
  4. 락 해제 감지 후 재시도: 기존 프로세스가 락을 해제하면, 대기 중이던 프로세스가 락을 획득한다.

3.3 블록 클린아웃(Block Cleanout)

오라클은 다중 트랜잭션 환경에서 **일관된 읽기(Read Consistency)**를 유지하기 위해 Undo를 사용한다. 하지만 한 번 트랜잭션이 커밋되면, 나중에 그 블록을 읽는 사용자가 해당 정보를 Undo에서 찾지 않도록, 해당 블록에 커밋 정보를 반영하는 작업을 수행한다. 이 작업을 블록 클린아웃이라 부른다.

  • 클린아웃은 SELECT 시점이나 백그라운드에서 수행될 수 있다.
  • 클린아웃 중에는 블록 수정이 발생하므로 Buffer Lock이 필요하다.

🔄 이 과정은 읽기 작업임에도 일시적으로 블록이 "쓰기 락" 상태로 바뀔 수 있다.


3.4 버퍼 핸들과 Pin 설정

📦 버퍼 핸들(Buffer Handle)이란?

  • 버퍼 헤더의 포인터를 통해 참조되는 구조체로, 특정 블록의 접근 제어 정보를 담고 있다.
  • 각 프로세스는 버퍼 핸들을 통해 블록을 Pin하여 사용.

🔗 Pinning의 과정:

  • 프로세스가 버퍼 핸들을 획득하면 헤더에 있는 소유자 리스트에 연결된다.
  • 이 리스트에 등록됨으로써, 해당 프로세스가 블록을 사용하는 동안 다른 프로세스가 블록을 교체하지 못하게 한다.

3.5 Buffer Pinning의 장점

Buffer Pinning은 논리적 블록 읽기(Logical Block Read) 시 발생하는 불필요한 작업을 제거하여 성능을 획기적으로 향상시킨다.

🌟 효과:

  • 해시 체인 래치 재획득 없이 블록을 연속해서 참조 가능
  • 재검색 없이 캐시에 유지된 블록을 직접 재사용 가능

🔁 CPU와 메모리 자원을 절약하며, 특히 반복적인 액세스가 많은 인덱스 스캔에서 효과적이다.


3.6 인덱스 리프 블록과 Range Scan

📌 인덱스 리프 블록이란?

  • B-Tree 인덱스 구조에서, 실제 인덱스 항목들이 저장되는 최하위 블록.
  • 데이터베이스에서 인덱스를 통해 WHERE 조건을 만족하는 값을 찾을 때 참조된다.

🔍 Index Range Scan의 I/O 증가 원인

  • 인덱스 리프 블록은 여러 개로 나뉘어 있어 여러 블록을 순차적으로 탐색해야 함.
  • 매번 새로운 블록을 읽어야 하므로 디스크 I/O가 늘어날 수 있다.

3.7 Buffer Pinning으로 I/O 감소하는 원리

Buffer Pinning은 인덱스 리프 블록 같이 빈번하게 반복 접근되는 블록을 메모리에 고정시켜, 불필요한 디스크 접근을 줄여준다.

🔧 원리 요약:

  1. 첫 번째 액세스 시 블록을 버퍼 캐시에 로드하고 핀 설정
  2. 이후 동일 세션에서 동일 블록 재접근 시
    • 해시 체인 탐색, 래치 획득 없이 직접 재사용 가능
    • 디스크 I/O 생략 가능

📈 인덱스 기반 검색이 많은 OLTP 환경에서는 Buffer Pinning이 성능 최적화의 핵심이 될 수 있다.


📎 관련 태그

#Oracle #BufferLock #BufferPinning #Latch #BlockCleanout #IndexLeafBlock #RangeScan #LogicalRead #DatabasePerformance #ConcurrencyControl #SGA

728x90