행위

LOB 사용시 storage in row 옵션

DB CAFE

thumb_up 추천메뉴 바로가기


1 LOB STORAGE의 STORAGE IN ROW 옵션[편집]

  1. Inline and Out-of-Line LOB Storage

LOB 컬럼은 실제 LOB 값의 저장위치를 가리키는 로케이터(locator)를 저장.

  1. 테이블 생성시 storage in row 옵션, 또는 LOB 값의 크기에 따라서 실제 LOB의 값이 테이블 블록의 로우 안(inline)에 저장되거나 아예 테이블 블록 바깥에 별도의CLOB 블록에(out-of-line)에 저장

1.1 CLOB에 저장 되는 조건[편집]

  1. 테이블 생성시 LOB storage 절에 DISABLE STORAGE IN ROW 로 명시하는 경우
  2. LOB 값의 크기가 근사적으로 4000 바이트(4000 - 시스템 제어 정보)보다 큰 경우
  3. CLOB 블록에 저장된 LOB값을 4000 바이트 보다 작은 값으로 update 하더라도 그대로 CLOB 블록에 저장

1.2 테이블 생성시 STORAGE 옵션과 테이블스페이스[편집]

CREATE TABLE ORACLE.T1
(
    A1       CHAR(24) NOT NULL,
    A2       VARCHAR2(14) DEFAULT TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'),
    A3       VARCHAR2(10),
    A4       VARCHAR2(3),
    A5       VARCHAR2(13),
    A6       CLOB
)
TABLESPACE TABLE_TS
NOCOMPRESS
LOB (A6) STORE AS
(
    TABLESPACE CLOB_TS
    DISABLE STORAGE IN ROW
    STORAGE
    (
        INITIAL 64K
    )
    CHUNK 8192
    RETENTION
);

아래는 테이블 블록의 테이블스페이스와 다른 CLOB 블록의 테이블스페이스를 명시적으로 주는 경우 또는 DISABLE STORAGE IN ROW 옵션을 명시적으로 주는 경우를 구분하여 테스트한 결과에 대한 표임 TABLE TABLESPACE

CLOB TABLESPACE	
CLOB OPTION
TABLE BLOCKS
CLOB BLOCKS
TOTAL BLOCKS
TABLE_TS	
TABLE_TS
없는 경우
1728896	 642824	
2371720
TABLE_TS
CLOB_TS 	

DISABLE STORAGE IN ROW

33792	 6019456	 6053248
TABLE_TS	 TABLE_TS 	 없는 경우	
1736704
645128
2381832
TABLE_TS
CLOB_TS	

DISABLE STORAGE IN ROW

33792	 6027776	 6061568

테이블 블록의 테이블스페이스와 CLOB 블록의 테이블스페이스를 동일하게 설정하든 안하든, DISABLE STORAGE IN ROW 옵션이 없는 경우(CLOB값의 크기에 따라 테이블 블록에도 저장이 가능한 경우)에는 테이블 블록의 개수가 많은 것을 확인할 수 있다. 응답 시간이 중요한 웹 또는 CLOB 값을 제외한 나머지 컬럼에 대한 조회, 또는 DML 작업이 많은 경우에 불필요한 CLOB 블록까지 버퍼 캐시로 로드하여 액세스하므로 속도의 저하가 예상된다.

DISABLE STORAGE IN ROW 옵션이 설정된 경우에는 TABLE BLOCK의 개수가 현저하게 작고 모든 CLOB 값이 CLOB 테이블스페이스에 저장되는 것을 확인할 수 있다. 웹처럼 응답시간이 중요하고 CLOB값은 조회되는 경우가 훨씬 적은 경우에는 CLOB을 별도의 테이블스페이스에 저장하여 응답시간 및 DML 작업을 신속하게 진행할 수 있다. 하지만 CLOB 블록의 개수가 현저하게 늘어나는 단점이 있으므로 초기 이행시 부하가 예상된다. 그러므로 CLOB 테이블스페이스를 별도의 디스크 스토리지로 분산하고 캐시를 이용한다면 단점을 많이 커버할 수 있다