Oracle에서 논리적으로 가장 작은 I/O단위가 블록(Block)이다. Extent는 관련된 블록이 모여서 구성되는 논리적 단위다.
Extent 단위로 Segment 가 저장공간을 할당(allocate)받거나 해제(de-allocate)하게 된다. Extent를 사용하게 되면 관련된 Block들을 연속된 공간에 저장하게 되므로 I/O에 유리하다.
즉 Oracle은 DataFile에 내려쓸 내용이 있으면 Extent 단위로 할당 받아서 관련된 Block이 연속된 공간에 저장되도록 한다.
단편화 (Fragmentation)
실제로 위와 같은 용도로 사용되기 때문에 DataFile에는 비어 있는 Free extent가 있지만, 그 공간이 연속되지 않으면 그 Free Extent 들의 연속된 공간이 할당하려는 크기보다 크더라도 데이터를 저장 할 수가 없다.
즉 비어있는 공간이 4MB이더라도 연속되지 않는 공간이라면 3MB의 데이터를 저장하지 못한다.
※ Oracle 에서 제공하는 Util을 사용하여 단편화 된 공간을 연속되게 해야한다. 하지만 절대로 window에서 제공하는 조각모음을 사용하면 안된다.
allocate 와 deallocate
Segment가 Extent를 할당(allocate) 받는 순간
- create : Segment의 생성
- extented : Segment의 공간 확장
- altered : Segment의 변경 (컬럼 추가등)
Segment가 Extent를 반납 (deallocate) 하는 순간
- droped
- altered
- truncated
delete 같은 경우는 실제로 데이터가 삭제되지 않기 때문에 반납되지 않는다. (수동반납)
'Oracle > Architecture' 카테고리의 다른 글
SORT와 PGA_AGGREGATE_TARGET (2) | 2012.04.10 |
---|---|
[Storage - 3] Segment (0) | 2012.01.27 |
[Storage - 1] Database Block (0) | 2012.01.26 |
SHUTDOWN > NOMOUNT > MOUNT > OPEN (0) | 2012.01.24 |
Oracle Server Architecture 용어 정리 (0) | 2012.01.17 |