Oracle 10g 강좌
Overview of Extents 2 2 15,711

by 김정식 EXTENT UNIFORM SIZE MINEXTENTS LMT DMT AUTOALLOCATE [2006.04.11]


Extent란?

  Extent는 Segment에 할당된 연속적인 블록으로 Database Storage 할당의 논리적인 단위 입니다.

  각 Segment는 Data를 넣기 위해 적어도 하나 이상의 Extent가 생성되어야 합니다.

When Extents Are Allocated

  각각의 segment는 data를 저장하기 위해서 적어도 하나의 extent로 만들어 집니다. 이 extent를 segment의 initial extent라 부릅니다.

  Object는 현재 할당된 모든 Extent가 이미 채워진 경우에만 새로운 Extent를 할당 합니다.

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

 

Extents의 할당 방법

DICTIONARY MANAGED TABLESPACE의 할당방법

  전통적인 방법으로 STORAGE절을 사용하여 EXTENT를 할당 합니다.

  Oracle 9i 버전이후 DICTIONARY MANAGED 방식의 사용을 권장하지 않음

 
SQL> CREATE TABLESPACE local_tbs
     DATAFILE 'C:\oracle\oradata\tbs\dic_tbs01.dbf' SIZE 50M
     DEFAULT STORAGE
    (INITIAL   1M
     NEXT      1M
     MINEXTENTS 2
     MAXEXTENTS 50
     PCTINCREASE 0);
    

  - INITIAL : Segment가 생성될 때 할당될 때 첫 번째 확장영역의 크기 입니다.

  - NEXT : 다음 Extents의 크기, 두 번째 확장영역은 NEXT의 원래 크기와 동일하며 다음부터의 NEXT는 (1+PCTINCREASE/100)과 Next의 이전크기를 곱한 크기로 설정 됩니다

  - MINEXTENTS : 생성할 Extents의 최소 값

  - MAXEXTENTS : 생성할 Extents의 최대 값

  - PCTINCREASE : Extents의 증가율, Default값은 50 입니다

LOCALLY MANAGED TABLESPACES의 할당방법

  9i에서 SYSTEM TABLESPACELOCALLY TABLESPACE일 경우, 일반 TABLESPACE생성시 DEFAULT STORAGE절(DICTIONARY 방식)은 사용되지 않습니다.

  LOCALLY MANAGED TABLESPACES를 사용하면서, CREATE TABLE 절에 STORAGE를 준다면 모두 무시됩니다. 즉 TABLESPACE 에서 정한 UNIFORM SIZE 대로 EXTENT 할당을 합니다.

 
SQL> CREATE TABLESPACE local_tbs
     DATAFILE 'C:\oracle\oradata\tbs\local_tbs01.dbf' 
     SIZE 50M
     EXTENT MANAGEMENT LOCAL
     UNIFORM SIZE 10M;
    

  AUTOALLOCATE
      - 테이블스페이스에 대한 익스텐트 관리를 시스템에서 관장하도록 합니다.
      - 사용자는 익스텐트의 크기를 수동으로 지정할 수 없습니다.

  UNIFORM
      - 테이블스페이스가 동일한 크기의 익스텐트로 구성되도록 지정합니다. 크기는 기본적으로 바이트 단위로 지정
      - 익스텐트 크기를 KB 또는 MB 단위로 지정하기 위해서는 K 또는 M 을 사용하여 지정 합니다
      - 이 옵션을 사용하게 되면, DEFAULT Storage 절을 사용할 수 없습니다.

  만약 EXTENT MANAGEMENT LOCAL 절을 사용하면서 AUTOALLOCATE 또는 UNIFORM을 명시하지 않는다면 AUTOALLOCATE가 default로 이용 됩니다.

When Extents Are Deallocated

  Segment를 drop또는 truncate 시킬 때 De-allocated 됩니다..

  ALTER TABLE table_name DEALLOCATE UNUSED 명령을 사용하여 사용되지 않은 extent들을 de-allocate 할 수 있습니다.

  잦은 De-Allocation은 Tablespace의 단편화(Fragmentation) 현상을 야기할 수 있습니다.

- 강좌 URL : http://www.gurubee.net/lecture/1897

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 정성일 [2006.09.18 21:22:09]
두 번째 확장영역은 NEXT의 원래 크기와 동일하며 다음부터의 NEXT는 (1+PCTINCREASE/100)과 Next의 이전크기를 곱한 크기로 설정 됩니다

위 구문에서 NEXT의 이전크기를 더한값으로 설정되는게 아닌가 하는 의문을 가집니다 ;;

by nalls76 [2008.04.23 16:00:27]
제가알기론....
NEXT의 이전크기 + (1*PCTINCREASE/100)
으로 알고있는데요.. ^^;;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입