728x90
반응형
📌 Oracle Data Block이란?
1. Oracle Data Block의 정의
오라클 데이터베이스에서 데이터 블록(Data Block)은 데이터 저장과 입출력의 최소 단위입니다.
테이블의 행(Row), 인덱스 정보 등 모든 데이터는 결국 블록 단위로 디스크에 저장되고, 캐시에서 읽혀집니다.
데이터베이스 계층 구조를 간단히 정리하면 다음과 같습니다.
- Tablespace → Segment(테이블/인덱스 등) → Extent → Data Block → Row
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
- 블록 내 여유 공간.
- 용도:
- Row UPDATE 시 데이터 길이가 늘어나는 경우 수용
- 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 속성
- 정의: 블록 내 남겨둘 여유 공간의 비율
- 역할:
- Row UPDATE 시 Row 길이가 늘어날 때 buffer 역할
- ITL 슬롯을 확장할 때 buffer 역할
- 주의:
- 너무 크게 잡으면 저장 효율 저하(=space 낭비)
- 너무 작게 잡으면 Update 시 Migration, ITL 확장 불가 문제 발생
5. Row-Level Lock과 ITL
- 오라클은 Row 단위 잠금(Row-Level Lock)을 지원 → 동시성 극대화.
- Row Header에는 Lock Bit, ITL 참조 포인터가 있으며, ITL 슬롯에 해당 트랜잭션 ID 기록.
- 따라서 같은 블록 안에서도 서로 다른 Row는 동시에 수정 가능.
- ITL 부족 시 ITL Wait 발생 가능.
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
반응형
'데이터베이스 > Oracle' 카테고리의 다른 글
[DB/Oracle] 계층형 쿼리로 Q&A 게시판 구현하기 (0) | 2025.09.17 |
---|---|
[DB/Oracle] 무작위 20자리 문자열 키값 만들기 (년월일시분초 + 랜덤 6자리) (0) | 2025.09.16 |
[Oracle] 오라클 순위 관련 함수(ROW_NUMBER, RANK, DENSE_RANK) (0) | 2021.06.10 |
[Oracle] 오라클 시간 관련 기능 - 세션 설정, 타임 존 변경 등 (0) | 2021.06.10 |
[Oracle] 오라클 ROWNUM과 BETWEEN을 이용한 조회 (0) | 2021.06.10 |
댓글