오라클 대용량 db 처리 속도,, 0 6 885

by 노박사 [Oracle 기초] [2019.05.25 14:34:14]


안녕하세요~

 

정기적으로 배치를 돌리는 프로그램이 있습니다.

 

프로그램 기능은 매달 전체 도로화 주소 데이터를 가지고 와서, 도로 주소를 조회해서 변경된 주소면 업데이트를 해주고, 없으면 인서트 해주는 프로그램 입니다.

 

하지만 이번에 프로그램을 바꿔서 테이블을 truncate 한다음 모두 인서트 처리하도록 바꿧습니다.

 

결론은 업데이트 8만건 하는 것은 30분정도 걸리고, 그냥 인서트 8만건하면 3시간에서 6시간 정도 걸립니다.

 

보통 업데이트가 더빠른 걸로 알고있는데 왜그런지 이유를 알수있을까요?..

by 마농 [2019.05.27 08:11:27]

변경건만 업데이트 될테니, 그 대상 건수가 훨신 더 적을 듯 하네요.
insert 대신 ctas(create as select) 를 이용해 보세요.
insert 를 이용해야 한다면? 테이블 nologging 과 append 힌트를 이용해 보세요.
그리고 건수 대비 너무 많은 시간이 걸리네요?
복잡한 로직이 들어가거나? DB링크를 이용하거나? 1건씩 루프돌려 입력하거나? 뭔가 오래걸릴만한 조건인 듯 한데요?


by 부쉬맨 [2019.05.27 11:22:49]

truncate 를 햇다면 인서트가 느려질이유가없네요 더욱빨라야할텐데( 하이워터마크가 사라짐) 

1) 인서트나 업데이트 하기위한 대상 sql 변경이 되엇는지 확인

2) 통계정보 재생성으로 영향받아서 sql이 동작이 잘못되엇는지 확인

3) 구조상 변경으로 마농님이 말한거처럼 nologin 처리 하여서 append힌트를 사용


by DarkBee [2019.05.27 12:39:51]

Fetch 를 건당 돌리시지는 않으신가요?,


by 우리집아찌 [2019.05.27 13:08:56]

인서트 8만건이 3시간이나 걸리나요?

컬럼중에 lob형식있는지 확인해보세요


by 우리집아찌 [2019.05.27 13:10:57]

아 db링크로 되어있나요?


by 노박사 [2019.05.27 14:48:39]

아 죄송합니다... 테스트 테이블 만들어서 한다구,, 

깜빡하고 인덱스를 안걸었네욤,,, ㅠㅠ

 

다들 감사합니다

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