특정 배포 매개 변수를 준수하는 6,800,000 개의 레코드가있는 CSV 파일을 생성하고 Oracle의 SQL * Loader를 사용하여 테이블을 채우는 Java 프로그램을 작성하고 있습니다.오라클의 SQL * Loader를 조정하는 방법은 무엇입니까?
다른 크기의 레코드 (50,000 및 500.000)를 사용하여 프로그램을 테스트하고 있습니다. CSV 파일 생성 자체가 매우 빠르며 동시성을 사용하여 이러한 레코드를 만들어 파일에 삽입하는 데 수 밀리 초가 소요됩니다.
한편, 레코드를 삽입하는 데 너무 오래 걸립니다. SQL * Loader에 의해 생성 된 로그 파일을 읽는 경우 테이블에 50,000 개의 레코드를 채우고 00 : 07 : 58.83 분에 500,000을 채우려면 00 : 00 : 32.90 초가 걸립니다.
내가 봤던 SQL * Loader 벤치 마크는 2 분 이내에 2 백만 행과 같이 훨씬 더 나은 성능을 보여 주었다. 나는 시간을 개선하기 위해 this tutorial을 따라 갔지만 거의 변경되지 않았습니다. 여기에 분명히 잘못된 것이 있지만, 나는 무엇을 모르겠습니다. 내가 PARALLEL = TRUE를 사용하여 시도했지만, 나는 (표 MY_TABLE이 지수는 그것을 바탕으로 정의하고있다)을 ORA-26002 오류가 발생합니다 :
OPTIONS (SILENT=ALL, DIRECT=TRUE, ERRORS=50, COLUMNARRAYROWS=50000, STREAMSIZE=500000)
UNRECOVERABLE LOAD DATA
APPEND
INTO TABLE MY_TABLE
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
...
또 다른 중요한 정보 :
여기 내 제어 파일입니다. 불행히도 skip_index_maintenance로 실행하면 색인을 사용할 수 없게됩니다.
내가 뭘 잘못하고 있니?
업데이트
곧 프로그램 (초 미만)를 실행 한 후, 모든 행이 이미 데이터베이스에 존재하는 것으로 나타났습니다. 그러나 SQL * Loader는 여전히 사용 중이며 32-45 초 후에 만 완료됩니다.
무엇을 할 수 있습니까?
좋은 하나를 만들기 위해 사전 및 사후 세션 SQL을 만들 내가 기존의 삽입과 노력 할게요, 옵션을 선택하지 않습니다 .. – Tarek
전통적인 경로는 더 많은 시간이 걸렸습니다 ... 문제는 테이블이나 데이터베이스에있는 것 같아요. DBA에게 살펴 보도록하겠습니다. – Tarek