문서유형ㅣ기술정보
분야ㅣ패치/업그레이드
적용제품버전ㅣ6FS06, 6FS07
문서번호ㅣTPATI006
개요
테이블의 column modify 시, variable size를 갖는 type(number, varchar, nvarchar, raw)은 Size Up을 할 경우 실제 row가 변경되지 않기 때문에 패치를 통해 속도를 개선할 수 있습니다.
방법
column modify DDL 속도 개선 패치 적용하여 해결합니다.
- 적용패치: 194853e
- 해당 패치의 경우 Tibero7 에서 기본 반영되어 있습니다.
참고
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.
테스트
1. 샘플 데이터 생성
100만건의 랜덤 데이터를 생성합니다.
-- 테스트 테이블 생성
CREATE TABLE test_num_tbl (
id NUMBER(10) PRIMARY KEY,
amt NUMBER(8,2) NOT NULL, -- 최대 999999.99
category_cd VARCHAR2(10),
created_dt DATE
);
-- 1000만건 테스트 데이터 입력
DECLARE
TYPE t_id_tab IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
TYPE t_amt_tab IS TABLE OF NUMBER(8,2) INDEX BY PLS_INTEGER;
TYPE t_cat_tab IS TABLE OF VARCHAR2(10) INDEX BY PLS_INTEGER;
v_id_arr t_id_tab;
v_amt_arr t_amt_tab;
v_cat_arr t_cat_tab;
c_total CONSTANT PLS_INTEGER := 1000000; -- 총 건수
c_batch CONSTANT PLS_INTEGER := 10000; -- 배치(커밋) 단위
v_start_tm TIMESTAMP := SYSTIMESTAMP;
BEGIN
FOR i IN 0 .. (c_total / c_batch) - 1 LOOP
v_id_arr.DELETE;
v_amt_arr.DELETE;
v_cat_arr.DELETE;
FOR j IN 1 .. c_batch LOOP
v_id_arr(j) := i * c_batch + j;
-- NUMBER(8,2) 범위 내 랜덤 값: 0.00 ~ 999999.99
v_amt_arr(j) := ROUND(DBMS_RANDOM.VALUE(0, 999999.99), 2);
v_cat_arr(j) := CASE MOD(v_id_arr(j), 5)
WHEN 0 THEN 'A'
WHEN 1 THEN 'B'
WHEN 2 THEN 'C'
WHEN 3 THEN 'D'
ELSE 'E'
END;
END LOOP;
FORALL k IN 1 .. c_batch
INSERT INTO test_num_tbl (id, amt, category_cd, created_dt)
VALUES (v_id_arr(k), v_amt_arr(k), v_cat_arr(k), SYSDATE - DBMS_RANDOM.VALUE(0, 365));
COMMIT;
DBMS_OUTPUT.PUT_LINE('진행: ' || ((i+1) * c_batch) || ' / ' || c_total);
END LOOP;
--DBMS_OUTPUT.PUT_LINE('완료. 소요시간: ' ||
-- EXTRACT(SECOND FROM (SYSTIMESTAMP - v_start_tm)) || 'sec');
END;
/
2. 패치 전
패치 전에는 modify 수행 시간이 약 9.6초 소요되었습니다.
SQL> ALTER TABLE test_num_tbl MODIFY (amt NUMBER(10,4)); Table 'TEST_NUM_TBL' altered. Total elapsed time 00:00:09.653586
3. 패치 후
패치 후에는 modify 수행 시간이 약 0.1초 소요되었습니다.
SQL> ALTER TABLE test_num_tbl MODIFY (amt NUMBER(10,4)); Table 'TEST_NUM_TBL' altered. Total elapsed time 00:00:00.124676