문서유형ㅣ기술정보
분야ㅣ관리/환경설정
적용제품버전ㅣ6FS07, 6FS07PS, 7FS02, 7FS02PS
문서번호ㅣTADTI122
개요
방법
현상
GLOBAL TEMPORARY TABLE를 ON COMMIT PRESERVE ROWS로 생성하면 할당된 공간과 데이터가 유지됩니다.
이 상태에서 TRUNCATE GLOBAL TEMPORARY TABLE를 수행해도 할당된 공간은 반환되지 않습니다.
이로 인해 GLOBAL TEMPORARY TABLE 생성 및 후속 작업을 반복하는 과정에서 temp tablespace full이 발생할 수 있습니다.
대응 방안
Tibero의 GLOBAL TEMPORARY TABLE는 반복적으로 사용하는 OLTP 환경을 고려하여 설계된 기능입니다.
truncate 이후 다시 insert를 수행할 때 extent를 새로 할당하는 비용을 줄이기 위해, 기존 공간을 재사용하는 방식으로 동작합니다.
따라서 해당 현상은 버그가 아닌 Tibero의 스펙입니다.
ON COMMIT PRESERVE ROWS 옵션 사용 여부에 따라 공간 반환 시점이 달라집니다.
다음과 같이 동작합니다.
ON COMMIT PRESERVE ROWS 옵션이 없는 경우
transaction 종료 시 공간이 반환되므로 문제가 발생하지 않습니다.ON COMMIT PRESERVE ROWS 옵션을 사용하는 경우
세션 종료 시까지 공간이 반환되지 않으므로, 필요 시 세션을 종료해야 합니다.
또한, 아래 패치가 적용된 환경에서는 FOR STATISTICS 옵션을 사용하여 truncate 수행 시 공간을 반환할 수 있습니다.
패치: 6 FS07PS_339187a, 7 FS02PS_339187a
패치 내용: TRUNCATE GLOBAL TEMPORARY TABLE ~ FOR STATISTICS 옵션으로 공간을 반환하는 기능입니다.
비고: 통계 수집 중 GLOBAL TEMPORARY TABLE 사용 시 발생하는 문제를 해결하기 위해 구현된 기능이며, 고객 제공용 정식 기능은 아닙니다.
현상 확인
테스트 환경과 확인 결과는 다음과 같습니다.
테스트 환경
Tibero 7.2.4 배포버전
FS02PS_339187a 패치 적용
주의
공간 반환은 테이블 삭제를 의미하지 않습니다.
테이블 삭제를 위해서는 별도의 DROP 작업이 필요합니다.
(1) 일반 GLOBAL TEMPORARY TABLE
트랜잭션 단위로 공간이 즉시 반환됩니다.
SQL> CREATE GLOBAL TEMPORARY TABLE TIBERO.TEST_TMP 2 AS SELECT level as idnum from dual connect by level < 1000001; Table 'TIBERO.TEST_TMP' created. SQL> SELECT USERNAME,SEGTYPE,BLOCKS FROM V$TEMPSEG_USAGE; 0 row selected.
(2) ON COMMIT PRESERVE ROWS 사용 시
TRUNCATE 이후에도 공간이 유지됩니다.
세션 종료 후 재접속 시 공간이 반환됩니다.
SQL> CREATE GLOBAL TEMPORARY TABLE TIBERO.TEST_TMP ON COMMIT PRESERVE ROWS 2 AS SELECT level as idnum from dual connect by level < 1000001; Table 'TIBERO.TEST_TMP' created. SQL> SELECT USERNAME,SEGTYPE,BLOCKS FROM V$TEMPSEG_USAGE; USERNAME SEGTYPE BLOCKS -------------------------------- -------------------------------- ---------- TIBERO DATA 1672 1 row selected. SQL> TRUNCATE TABLE TIBERO.TEST_TMP; Table 'TIBERO.TEST_TMP' truncated. SQL> SELECT USERNAME,SEGTYPE,BLOCKS FROM V$TEMPSEG_USAGE; USERNAME SEGTYPE BLOCKS -------------------------------- -------------------------------- ---------- TIBERO DATA 1672 1 row selected. SQL> exit Disconnected. [python@t1 ~]$ tbsql tibero/tmax tbSQL 7 TmaxTibero Corporation Copyright (c) 2020-. All rights reserved. Connected to Tibero. SQL> SELECT USERNAME,SEGTYPE,BLOCKS FROM V$TEMPSEG_USAGE; 0 row selected.
(3) FOR STATISTICS 옵션 사용 시
TRUNCATE 수행 시 즉시 공간이 반환됩니다.
SQL> CREATE GLOBAL TEMPORARY TABLE TIBERO.TEST_TMP ON COMMIT PRESERVE ROWS 2 AS SELECT level as idnum from dual connect by level < 1000001; Table 'TIBERO.TEST_TMP' created. SQL> SELECT USERNAME,SEGTYPE,BLOCKS FROM V$TEMPSEG_USAGE; USERNAME SEGTYPE BLOCKS -------------------------------- -------------------------------- ---------- TIBERO DATA 1672 1 row selected. SQL> TRUNCATE TABLE TIBERO.TEST_TMP for statistics; Table 'TIBERO.TEST_TMP' truncated. SQL> SELECT USERNAME,SEGTYPE,BLOCKS FROM V$TEMPSEG_USAGE; 0 row selected.