Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-16
제목 ORACLE BLOCK 과 EXTENT : TABLE STORAGE PARAMETER
오라클 logical storage structure에는 block, extent가 있다. logical이라는
의미는 physical의 상대 개념으로 우리가 눈으로 직접 확인하는 datafile의
모습과는 달리 내부적으로 관리되는 구조라는 의미이다.
여기서는 이들의 기본적인 특징을 extent를 중심으로 알아본다.

1. Data Block

Data Block은 logical block, ORACLE block 또는 page라는 용어로 불리워지는데
os disk 상의 일정한 byte 단위의 space를 말한다. 예로 ORACLE block이 2K라는
의미는 os에서 2048 bytes가 한 단위로 묶여서 block을 형성함을 의미한다.
이것은 다음과 같은 특징을 갖는다.

.ORACLE block size는 os block의 N 배수로 이루어 진다.
.Database가 생성될 때 지정된 ORACLE block은 다시 변경이 불가능하다.
.SGA의 database buffer에 I/O가 일어나는 기본 단위가 된다.
.init.ora file의 DB_BLOCK_SIZE로 지정한다.

2. Extent

Extent는 일정한 수의 연속된 ORACLE block들을 말한다. 일정한 수라는 의미는
사용자가 지정한 값을 말한다. 예로 create table 문장에서 storage option 중
initial extent를 10K로 지정하면 db_block_size가 2K일 경우 5 Block이 된다.
즉 5개의 ORACLE Block이 하나의 extent로 구성됨을 의미하며 연속되었다 함은
tablespace가 fragment가 다수 발생하여 free space가 비록 많이 있더라도
조각 조각 나 있다면 (연속된 덩어리로 extent 크기의 free space가 없는 경우)
extent는 allocate되지 못한다.

.Extent는 언제 할당(allocation)되는가?
Segment(Table, Index 등)가 처음 생성될 때 Initial Extent 크기 만한
Extent가 할당.
Segment가 점차 커짐에 따라 Next Extent 크기 만한 Extent가 할당됨.

.Extent는 언제 de-allocaltion되는가?
Segment를 drop 또는 truncate시킬 때.
Segment 크기가 optimal보다 커졌을 때
(이 경우는 rollback segment에만 해당)

.Segment create 시 지정하는 max extent는 어떻게 계산되는가?
Max extent #=((db_block_size - 24) / 2 - 44) / 8

예) db_block_size는 8K라면
Max extent #=((8192 - 24) / 2 - 44) / 8 = 508


출처 : korea technical bulletin
Comment
등록된 코멘트가 없습니다.