LOB STORAGE의 STORAGE IN ROW 옵션
- Inline and Out-of-Line LOB Storage - LOB 컬럼은 실제 LOB 값의 저장위치를 가리키는 로케이터(locator)를 저장.
- 테이블 생성시 storage in row 옵션, 또는 LOB 값의 크기에 따라서 실제 LOB의 값이 테이블 블록의 로우 안(inline)에 저장되거나 아예 테이블 블록 바깥에 별도의CLOB 블록에(out-of-line)에 저장
CLOB에 저장 되는 조건
- 테이블 생성시 LOB storage 절에 DISABLE STORAGE IN ROW 로 명시하는 경우
- LOB 값의 크기가 근사적으로 4000 바이트(4000 - 시스템 제어 정보)보다 큰 경우
- CLOB 블록에 저장된 LOB값을 4000 바이트 보다 작은 값으로 update 하더라도 그대로 CLOB 블록에 저장
테이블 생성시 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 테이블스페이스를 별도의 디스크 스토리지로 분산하고 캐시를 이용하면 성능 향상됨.