문서유형ㅣ기술정보
분야ㅣ관리/환경설정
적용제품버전ㅣ6FS07, 6FS07PS, 7FS02, 7FS02PS
문서번호ㅣTADTI013
개요
기존 테이블의 Free Space 확보 및 HWM(High Water Mark) 조절을 위해 move 명령을 실행할 경우, 기존 TABLESPACE로 이동하는 것과 새로운 TABLESPACE로 이동하는 것의 차이점을 설명합니다.
방법
기존 tablespace로 table move 실행
1. TEST용 Tablespapce 생성
CREATE TABLESPACE TEST_TS DATAFILE '/home/tibero7/datafile/test_ts.dtf' SIZE 2G AUTOEXTEND OFF; Tablespace 'TEST_TS' created.
2. TABLE 생성 후 data 삽입
SQL> CREATE TABLE TEST_TABLE (
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(100),
DATA VARCHAR2(1010),
BIRTH DATE
) TABLESPACE TEST_TS;
Table 'TEST2_TABLE' created.
SQL> BEGIN
FOR i IN 1..300000 LOOP
INSERT INTO TEST2_TABLE VALUES (i, 'NAME_' || i, RPAD('DATA', 1000, 'X'), SYSDATE);
END LOOP;
COMMIT;
END;
/
3. 기존 tablespace free space 확인
SQL> SELECT tablespace_name, file_id, block_id, bytes, blocks FROM dba_free_space WHERE tablespace_name = 'TEST_TS'; TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS ㅡㅡㅡㅡㅡㅡㅡㅡㅡ ㅡㅡㅡㅡ ㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡㅡ TEST_TS 5 48391 1751121920 213760 1 row selected.
4. 기존 tablespace로 table move 후 index rebuild
SQL> ALTER TABLE TEST_TABLE MOVE TABLESPACE TEST_TS; Table 'TEST_TABLE' altered. SQL> ALTER INDEX _TEST_CON121000125 REBUILD TABLESPACE TEST_TS; Index '_TEST_CON121000125' altered.
5. 기존 tablespace free space 확인
SQL> SELECT tablespace_name, file_id, block_id, bytes, blocks FROM dba_free_space WHERE tablespace_name = 'TEST_TS'; TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS ㅡㅡㅡㅡㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡㅡ TEST_TS 5 23 131072 16 TEST_TS 5 135 262144 32 TEST_TS 5 311 131072 16 TEST_TS 5 583 131072 16 TEST_TS 5 727 131072 16 TEST_TS 5 871 389283840 47520 TEST_TS 5 92423 1390411776 169728 7 rows selected.
- 합 = 1780482048
- 기존 tablespace로 table move 시 1,751,121,920 -> 1,780,482,048로 free space 값은 증가했지만, 데이터 파편화 현상이 발생한 것을 확인할 수 있습니다.
새로운 tablespace로 table move 실행
1. TEST용 새로운 Tablespapce 생성
CREATE TABLESPACE NEW_TEST DATAFILE '/home/tibero7/datafile/new_test.dtf' SIZE 2G AUTOEXTEND OFF;
2. TABLE MOVE and Index Rebuild 재실행
ALTER TABLE TEST_TABLE MOVE TABLESPACE NEW_TEST; Table 'TEST_TABLE' altered. ALTER INDEX _TEST_CON121000125 REBUILD TABLESPACE NEW_TEST; Index '_TEST_CON121000125' altered.
3. 이동 후 새로운 tablespace free space 확인
SELECT tablespace_name, file_id, block_id, bytes, blocks FROM dba_free_space WHERE tablespace_name = 'NEW_TEST'; TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS ㅡㅡㅡㅡㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡㅡ NEW_TEST 7 44807 1780482048 217344 1 row selected.
- 합 = 1780482048
- 새로운 table space로 table move 시 1,780,482,048 bytes로 free space bytes의 값은 기존 tablespace로 move한 값과 같지만, 데이터 파편화 현상이 발생하지 않았음을 확인할 수 있습니다.
참고Tibero는 table shrink를 공식적으로 지원하지 않으므로, 한 번 큰 Size로 할당된 Extent는 다시 작은 Size로는 할당되지 않기에 Extent 최적화 부분에서는 New tablespace로의 move가 관리 및 I/O 측면에서 더 효율적일 수 있습니다.