테이블 복사 시간 단축 관련.. 0 10 210

by 미타 [Oracle 백업/복구] oracle [2018.06.13 13:19:32]


안녕하세요!

매일 야간에 [테이블] 에서 [테이블]_Night 이라는 테이블로 데이터를 복사하는 배치가 있습니다.

Night 테이블을 truncate 한 뒤, 
INSERT /*+ APPEND */ INTO [테이블]_Night SELECT * FROM [테이블]
하는 단순한 작업입니다.

데이터 는 약 1500만건이고, 시간은 약 50분~1시간 정도 걸립니다만
걸리는 시간을 줄여달라는 의뢰가 들어왔습니다.

혹시 어떤 방법을 고려해볼 수 있을까요?

 

by 마농 [2018.06.13 15:30:59]
-- 1. Insert 대신 Create 를 이용하는 방법
DROP TABLE [테이블]_Night PURGE;
CREATE TABLE [테이블]_Night AS SELECT * FROM [테이블];
-- 2. 전체 처리 대신 변경분만 처리하는 방법
INSERT INTO [테이블]_Night
SELECT * FROM [테이블]
 WHERE 변경분만 추출하는 조건
;

 


by 미타 [2018.06.13 15:45:58]

변경분만 처리하는 방법부터 테스트 해보겠습니다, 감사합니다!


by 우리집아찌 [2018.06.14 11:07:25]

야간에 쓰는 사람이 없으시면

병렬처리도 고민해보세요.

일단 CTAS가 추천됩니다.

http://wiki.gurubee.net/pages/viewpage.action?pageId=4949376

 


by DJ [2018.06.14 13:32:31]

Please try with NOLOGGING option like this : 

INSERT /*+ APPEND */ INTO [테이블]_Night NOLOGGING SELECT * FROM [테이블]

 


by 우리집아찌 [2018.06.14 15:28:03]

INSERT /*+ APPEND */ INTO [테이블]_Night NOLOGGING SELECT * FROM [테이블] 

틀린 의미없는 구문입니다.   NOLOGGING 은 alias 처리됩니다.

alter table  [테이블]_Night nologging 하시고 끝나시면 logging 하셔야합니다.


by DJ [2018.06.14 17:14:19]

 (Sorry but I cannot type Korean here.)  Correct.    the Table has to be set to "nologging" in order not to generate redo/archive log.

I confused with CTAS.

CTAS also generates logs so put nologging option when CTAS as below:

create table [테이블]_Night nologging as select * from [테이블]

Please also check the force_logging option in your database: select force_logging from v$database;

If the force_logging is enabled, the nologging option won't work.


by 우리집아찌 [2018.06.15 09:09:17]

타국에서 일하시는가 봅니다.. ^^*

영어가 짧아서.. 쓰읍... ㅡㅡ;

타락천사님이 올려주신 자료입니다.

http://www.gurubee.net/article/24444


by 미타 [2018.06.15 13:44:58]

답변들 감사드립니다 !!

아직 이리저리 궁리중입니다만..

NOLOGGING 옵션을 준 후 Append 힌트를 사용해 본 결과, 시간 단축 효과를 거의 보지 못했습니다.

변경분만 업데이트 하려고 확인해봤더니 
한번에 몇백만건의 레코드가 비정기적으로 Update 되는 상황이라, 변경된 레코드를 select하는 시간만 30분 가까이 걸리는듯 합니다 ㅠ 

병렬처리의 경우는 degree를 Auto 혹은 2~16 정도로 바꿔서 몇번 테스트 해봤는데, 어떤 경우에서는 parallel 힌트 없이 때려박는 것보다 더 오래걸리네요.. 이 부분은 조금 더 공부해보고 다시 테스트해보려고 합니다 ㅠㅠ 

Create table as select 까지 한번 시도해보고.. 그래도 안되면 방법을 조금 더 찾아봐야겠습니다.

(v$ 관련 테이블은 권한이 없어서 볼 수가 없네요 ㅠㅠ)


by 미타 [2018.06.15 14:35:44]

CREATE TABLE AS SELECT 로 NOLOGGING 하니까 1시간 걸리던게 2분만에 끝났네요 ㅠㅠ 

다만 이 방법이 받아들여질지... 

일단 해결(?)은 된 것 같습니다!! 감사합니다


by 우리집아찌 [2018.06.15 15:18:11]

CTAS로 하시면 INDEX / COMMENT 다시 잡아주셔야합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입