출처 :  http://kr.forums.oracle.com/forums/thread.jspa?threadID=466852&tstart=810



제품 : ORACLE SERVER

작성날짜 : 2002-04-12


TABLE 생성 시 고려해야 할 STORAGE OPTION
===============================================



Purpose

------------------------------------------------------------------------------------------------
이 자료에서는 Table을 생성할 때 Storage option의 값을 어떻게 지정해야 할 지에 대해 간락히 설명한다.



Explanation
------------------------------------------------------------------------------------------------

1. Table 생성하기 전에 고려할 사항

(1) 테이블 데이타와 인덱스 데이타는 분리하여 다른 tablespace에 저장하는 것이 성능 향상을 위해 도움이 된다.

(2) 테이블 및 인덱스를 저장하는 파일은 백업 받기 좋도록 적당히 크기를 정하여 사용한다. 너무 작은 파일이 많지 않도록 한다.

(3) tablespace의 default storage는 그 tablespace자체의 storage를 control 하는 것이 아니라, 해당 tablespace에 저장되는 table이나 index가 storage값을 가지지 않을 때 저장되는 tablespace의 default storage값을 table이나 index의 storage값으로 하여, 생성, 관리되도록 하기 위한 것이다.



2. TABLE 생성시 고려해야 할 Option

(1) INITIAL
- 초기 테이블이 생성될 때 차지하는 크기를 정한다.
- 미리 데이타가 저장될 사이즈 만큼의 값을 계산하여 사용하는 것이 제일 좋다.

- 테이블이나 인덱스마다 값이 다르다.


(2) NEXT
- initial 에서 정한 만큼의 공간이 다 사용되었을 때 다음 번으로 추가되는 공간의 크기를 정한다.
- 테이블이 달라도 가능한 동일한 값을 통일하여 사용하면 테이블이 삭제되고 다시 생성하는 과정에서 발생하는 공간의 활용도를 최대한 높일 수 있다.

단, 이것은 비슷한 크기의 NEXT를 지정하게 되는 경우에 대해서 같게 지정하는 것이 공간 활용도에 유용하다는 것이지, table size가 완전히 다른 table의 경우에 같은 NEXT값을 지정하라는 의미는 아니다.
table의 크기가 크고 계속 size가 증가하는 table은 크기가 작고, 증가하지 않는 table에 비하여 EXTENT의 값은 분명히 커야만 한다.


(3) PCTINCREASE=0
- next 값이 사용될 때 증분되는 비율값을 설정한다.
- 디폴트 값은 50 으로 설정되어있으나 꼭 0 으로 셋팅하여 사용하기를 권한다.


(4) FREELIST
- insert 작업 시 미리 사용 가능한 블럭을 리스트하고 있다가 할당하는 곳이다.
- 대부분은 default로 충분하나, insert 작업이 동시에 매우 많이 발생하는 테이블이나 인덱스에서는 이 값을 증가시켜 블럭을 할당받기 위해 대기하는 일이 없도록 한다.


(5) PCTFREE
- 수정 시 늘어나는 데이타를 수용하기 위한 공간이다.
- 디풀트는 10 이나 빈번히 수정이 되면서 null 이었다가 데이타가 채워지는 경우는 이 값을 약 20 혹은 30 까지 크게 설정한다.



(6) PCTUSED
- 재사용되기 위해 필요한 블럭의 충진도 값을 설정한다. 즉, 하나의 블럭이 pctused에 지정된 값이하로 데이타가 저장되어 있을 때 다음 insert의 대상이 된다.

default로 40이므로 데이타가 한 블럭에 완전히 채워진 후 delete가 이루어 지면, 채워진 부분이 40%이하로 내려가야 다음 insert시 이 블럭을 사용하게 되는 것이다.


현재 지정된 initial, next, pctfree, pctused값을 조회해보기 위해서는 user_tables를 참조하면 되며, 이렇게 지정된 storage값에 의해 현재 몇개의 extents가 발생하였는지는 user_segments의 extents column을 조회하면 된다.



Reference Document

--------------------------------------------------------------------------------
Oracle SQL Reference Guide and Oracle Concept Manual
 
 



 

+ Recent posts