본문 바로가기

DB/DBA

테이블 세그먼트는 ?

테이블 세그먼트는 하나의 세그먼트 헤더와 하나 이상의 익스텐트들로 구성이 됩니다. 그리고 이 익스텐트들은 하나 또는 이상의 연속적인 블럭으로 구성이 됩니다.
각 세그먼트의 첫번째 블럭은 세그먼트 헤더가 됩니다. 하나의 세그먼트는 최소한 두개의 블록으로 구성이 됩니다 : 세그먼트 헤더와 initial extent
ex) CREATE TABLE X (X NUMBER) Storage (INITIAL 1) --> 두개의 블럭을 가진 하나의 세그먼트를 생성합니다.

블록사이즈는 데이터 베이스를 생성할때 결정되고 쉽게 바꾸어 질수 없습니다. 대부분 시스템의 Default block size는 2KB입니다.
오라클 8은 2 KB에서 64 KB까지 지원합니다. 항상 블럭의 크기는 O/S의 파일시스템 블럭사이즈의 배수로 선택을 해야합니다.
만약 오라클 블럭이 OS 블럭보다 작게 된다면 나머지의 데이터들은 항상 따로 읽히게 되는 경향이 있기 때문에 읽기 수행 속도에 문제를 일으키고 OS블록의 배수가 되지 않는다면 OS파일시스템의 공간을 낭비하게 됩니다.
오라클 블럭과 Performance 사이에는 특정한 연관이 있습니다. 큰 블록은 DW나 DSS형태의 시스템에 유용합니다. 더 많은 데이터가 한번 읽히게 될때 더많이 메모리에 적재 할수 있고 더많은 인덱스 Leaf Pointer들은 하나의 읽기 수행에서 저장됩니다. 만약에 시스템이 많은 DML을 발생시킨다면 (OLTP종류의..) , 더 작은 블록들이 유용합니다. 왜냐하면 블록당 더 적은 로우들이 있을수 있기 때문에 로우들에 대한 더적은 경합을 발생시킬 것입니다.
여러분들은 X$KVIS뷰를 통해서 DB_BLOCK_SIZE의 실제 값을 볼수 있습니다.

---------------------------------------------------

오라클 세그먼트 (SEGMENT)

--------------------------------------------------- 

 

-. 오라클 파일 구성

LOGICAL  : DATABASE > TABLESPACE > SEGMENT > EXTENT > BLOCK

PHYSICAL :            DATA FILE                       OS FILE BLOCK

오라클 block 사이즈가 4K 이고 OS block 사이즈가 512B라면 OS block 4개로 오라클 block들이 구성되어 있다

 

 

-. 오라클 오브젝트

create 문으로 생성 가능한 것들

 

non-schema object와 schema object로 나누어 진다

 non-schema object

schema object (= user object) 

 database  table*
 table space*  index*
 user  view
 rollback segment* (9i 부터 자동관리)  sequence
 ...  synonym
   function
   procedure
   package

 

* : segment (땅이 필요함)

이중 물리적 영역이 필요한 object를 segment라 한다

 

 

select segment_type, count(*)
from dba_segments
group by segment_type

 > 결과

SEGMENT_TYPE COUNT(*)
-------------------------------------
CACHE           1
CLUSTER         10
INDEX           1527
INDEX PARTITION 131
LOBINDEX        52
LOBSEGMENT      52
NESTED TABLE    1
ROLLBACK        1
TABLE           1623
TABLE PARTITION 59
TYPE2 UNDO      12