출처 : http://www.50001.com/tt/board/ttboard.cgi?act=read&db=20201&page=1&idx=33
안녕하세요...
아래와 같이 dblink를 통해서 데이터를 가져오는데 시간이 너무 오래걸리네요..
15,000,000 rows가져오는데 3시10분이 걸리네요...
어떻게 빨리하는 방법이 없을까요?
insert into callinfot select * from callinfot_s@ora901
입니다.
------------------------------
1. 동일 네트웍 zone의 퍼포먼스에도 영향을 받습니다.
2. 읽기 성능에 영향을 받습니다.
3. 쓰기 성능에 영향을 받습니다.
이상 열거한 내용은 리모트 시스템의 데이터를 로컬 시스템에 입력할 때
영향을 미치는 요소들에 대해 나열해보았습니다.
첫번째는 어짜피 구조상 문제이기 때문에 언급하긴 어렵구요,
두번째는 리모트 시스템의 읽기 성능을 parallel process를 사용하여
읽기 성능을 효과적으로 업그레이드 하시는 방법을 생각해 볼 필요가 있습니다.
힌트를 사용하셔서 parallel 로 full scan을 할 수 있도록 지시하시면 좋습니다.
세번째는 쓸 때 redo log의 logging양을 최소화하는 전략을 수립하셔야 합니다.
insert 구문에서는 /*+ append */ option을 사용하여 redo log 사용량을 최소화 할 수 있습니다.
정리하면
insert /*+ append */ into callinfot select /*+ parallel(a,8) full(a) */ * from callinfot_s@ora901 a;
이런 구문으로 수행해 보았습니다.
참고로 저희 사이트에서는 1500만건정도는 대략 20분정도 걸렸습니다.
마지막으로 local table에 index가 있다면 속도는 더 저하가 됩니다.
인덱스는 이관후 추가 생성하시는게 효율적입니다.