DATOR


CLOB 가공 속도 향상 사례2 (DBLINK를 통한 CLOB 컬럼 복제 시 속도 향상) TIPs


본 글은 CLOB 컬럼의 가공 속도 향상에 대한 글 2탄으로 CLOB 컬럼이 존재하는 테이블을 DBLINK로 복사할 때의 성능 향상 방안이다.

해결 포인트는 먼저 쓴 글과 동일한데, DBLINK에도 적용할 수 있음을 강조하기 위해 별도의 글로 정리해 본다.

  

우선 문제가 되는 상황을 설명하기 위해 공유해야 하는 몇 가지 사실은 다음과 같다.

1. CLOB컬럼은 DBLINK를 통해서 SELECT할 수 없다.

2. 단, CTAS나 INSERT INTO ... SELECT 문을 통해서 TARGET 쪽 DB에 복제한 후 사용해야 한다.

3. DBLINK를 통해서 CLOB컬럼이 있는 테이블의 INSERT ALL은 불가능하다.

 

문제는 CLOB 컬럼이 있는 테이블을 복제하는 것은 생각보다 시간이 많이 걸린다는 사실이다.  CLOB 컬럼이 존재하니 오래 걸리는 것이 당연한 결과라고 생각하기 쉬운데, 동일한 DB 내에서 복제 SQL을 수행해보면 DBLINK를 적용할 때 보다 훨신 빨리 수행됨을 알 수 있을 것이다.  환경에 따라 차이는 있겠지만, 다음과 같이 거의 20 ~ 40배 정도의 속도 차이를 경험하게 되며 네트워크의 속도에서 원인을 찾기에는 그 차이가 너무 크게 느껴진다.

 

CREATE TABLE T_TABLE  NOLOGGING AS SELECT TITLE, CONT  FROM S_TABLE;  -- 3초 (동일 DB) , CONT가 CLOB 컬럼

 

CREATE TABLE T_TABLE NOLOGGING AS SELECT TITLE, CONT  FROM S_TABLE@DBNAME; -- 110초  (DBLINK), CONT가 CLOB 컬럼

 

이렇게 차이가 나는 원인은 DBLINK를 통해 CLOB 컬럼을 가져올 때, CLOB 컬럼을 가공하는 것과 유사하게 오라클이 무엇인가 성능에 상당한 악영향을 미치는 작업을 하기 때문으로 예측할 수 있다. 따라서, 해결 방안은 먼저 글과 매우 유사한데, 차이점은 INSERT ALL문장을 사용할 수 없어 다음과 같이 2개의 문장을 사용해야 한다는 점이다.(그 결과 SOURCE 테이블을 2번 FULL SCAN해야만 하는 안타까움이 존재...)

 

CREATE TABLE T_TABLE NOLOGGING AS SELECT TITLE, CONT FROM S_TABLE@DBNAME WHERE LENGTHB(CONT) > 4000;  -- 2초

 

INSERT /*+ APPEND */ INTO T_TABLE SELECT TITLE, TO_CHAR(CONT) FROM FROM S_TABLE@DBNAME WHERE NVL(LENGTHB(CONT),0) <= 4000;  --  16초

 

결과적으로 110초 걸리던 작업이 18초로 줄어들게 되었다.

 

* 위의 CREATE 문은 물론 다음과 같이 INSERT 문으로 대체할 수 있다.

 

INSERT /*+ APPEND */ INTO T_TABLE SELECT TITLE, CONT FROM FROM S_TABLE@DBNAME WHERE NVL(LENGTHB(CONT),0) > 4000;

 

 

 

TAG

Leave Comments