본문 바로가기
데이터베이스/Oracle

[DB/Oracle] Oracle Data Block이란?

by drCode 2025. 9. 18.
728x90
반응형

Oracle Data Block

📌 Oracle Data Block이란?

1. Oracle Data Block의 정의

오라클 데이터베이스에서 데이터 블록(Data Block)은 데이터 저장과 입출력의 최소 단위입니다.
테이블의 행(Row), 인덱스 정보 등 모든 데이터는 결국 블록 단위로 디스크에 저장되고, 캐시에서 읽혀집니다.

데이터베이스 계층 구조를 간단히 정리하면 다음과 같습니다.

  • Tablespace → Segment(테이블/인덱스 등) → Extent → Data Block → Row

GPT로 도식화한 Oracle Data Block 구조

2. Oracle Data Block의 내부 구조

데이터 블록은 단순히 데이터를 담는 그릇이 아니라, 캐시 관리 / 트랜잭션 동시성 제어 / 데이터 저장을 모두 담당하는 구조를 가지고 있습니다.

(1) Cache Layer

  • 블록이 SGA의 Buffer Cache에 적재되었을 때 상태를 관리하는 영역.
  • Dirty 여부, 캐시 체인(Cache Chain) 연결 등 캐시 관리 메타 정보 포함.

(2) Transaction Layer

  • 블록 내에서 **트랜잭션(동시성)**을 제어하는 영역.
  • 핵심은 ITL(Interested Transaction List) 슬롯.
    • 1개의 ITL = 1개의 트랜잭션이 블록 내 Row를 수정할 때 필요한 자리표.
    • INITRANS, MAXTRANS 속성으로 ITL 슬롯 최소/최대 개수 설정 가능.
  • 각 Row는 ITL을 참조하여 “누가 나를 수정 중인지” 확인 가능 → Row-Level Lock 관리

(3) Block Free Area

  • 블록 내 여유 공간.
  • 용도:
    1. Row UPDATE 시 데이터 길이가 늘어나는 경우 수용
    2. ITL 슬롯 확장 시 공간 제공
  • PCTFREE 속성으로 비율 지정 → 과도하게 크면 공간 낭비, 너무 작으면 Row Migration·ITL Wait 발생

(4) Data Area

  • 실제 Row Data가 저장되는 영역.
  • 아래에서부터 차곡차곡 채워 올라오며, Row Directory로 관리됨.

3. INITRANS / MAXTRANS 속성

  • INITRANS: 블록 생성 시 확보해 두는 ITL 슬롯 개수
    • Table: 기본값 1
    • Index: 기본값 2
  • MAXTRANS: ITL 슬롯 확장 가능한 최대 개수 (기본 256, 실제는 블록 크기 한도까지 확장)
  • 의미: 블록 내에서 동시에 몇 개의 트랜잭션이 Row-Level Lock을 잡을 수 있는지 결정

4. PCTFREE 속성

  • 정의: 블록 내 남겨둘 여유 공간의 비율
  • 역할:
    1. Row UPDATE 시 Row 길이가 늘어날 때 buffer 역할
    2. ITL 슬롯을 확장할 때 buffer 역할
  • 주의:
    • 너무 크게 잡으면 저장 효율 저하(=space 낭비)
    • 너무 작게 잡으면 Update 시 Migration, ITL 확장 불가 문제 발생

GPT로 도식화한 PCTFREE로 확보된 Free Space

 


5. Row-Level Lock과 ITL

  • 오라클은 Row 단위 잠금(Row-Level Lock)을 지원 → 동시성 극대화.
  • Row Header에는 Lock Bit, ITL 참조 포인터가 있으며, ITL 슬롯에 해당 트랜잭션 ID 기록.
  • 따라서 같은 블록 안에서도 서로 다른 Row는 동시에 수정 가능.
  • ITL 부족 시 ITL Wait 발생 가능.

GPT로 도식화한 Row가 ITL을 포인트하는 구조


6. 인덱스 사용과 실행계획 관련 (추가 인사이트)

  • 오라클은 자동으로 인덱스를 생성하지 않는다. → 인덱스는 DBA/개발자가 직접 생성해야 함.
  • 다만, 쿼리를 인덱스를 활용할 수 있는 형태(WHERE 절 조건, 함수 사용 여부 등)로 작성하면 실행계획이 Full Scan → Index Scan으로 바뀔 수 있다.
  • 인덱스 사용 패턴: = / BETWEEN / LIKE 'ABC%' / IN (...)
  • 인덱스 미사용 패턴: 함수 적용, LIKE '%ABC', IS NULL, !=, 복합 인덱스에서 선두 컬럼 미사용 등

7. 정리

  • Oracle Data Block은 단순 저장 단위가 아니라 캐시 관리, 트랜잭션 동시성, 데이터 저장을 모두 아우르는 핵심 단위.
  • INITRANS / MAXTRANS: 블록 내 동시성 제어(ITL 슬롯 개수 관리)
  • PCTFREE: Update 및 ITL 확장을 위한 buffer 공간 → 동시성과 공간 효율성 균형 필요
  • Row-Level Lock: ITL 슬롯 + Row Header를 기반으로 동시성 보장
728x90
반응형

댓글