DataBase/Oracle

SQL*LOADER 의 성능 향상 TIP

griffy 2022. 8. 12. 15:38

10g 에서 SQL*LOADER 의 성능 향상 TIP   

 

작성:김도근

 

 

SQL*LOADER 사용시에 여러가지 적절한 옵션 사용과 테이블에 대한 설정값들을 변경시켜줍으로써 많은 성능 향상을 가져올수 있다.

다음은 그 권장되는 설정법들을 설명한 것이다.

 

1. DIRECT PATH LOAD를 사용한다. Direct path load는 load되는 테이블이나 파티션에 exclusive access를 요구한다. 추가적으로 트리거는 자동으로 disable되고 제약조건은 로드가 완료될때까지 defer(연기) 된다.

 

 

2. direct path load로 데이타를 로드시에 모든 CHECK 와 REFERENCE 무결성 제약조건은 자동으로 DISABLE된다. 그러나 그밖의 다른 타입의 제약조건 NOT NULL, UNIQUE, PRIMARY KEY 조건들은 반드시 DISABLE 시켜준다. 작업 완료후에 수동으로 enable시켜준다.

 

 

3. 정렬된 순서로 데이타를 load한다. 미리 sorting 된 데이타는 정렬에 필요한 공간temporary 영역 사용을 최소화한다. SQL*LOADER 옵션에서 SORTED INDEXES 를 CONTROL파일에 기술한다.

 

 

4. 인덱스 MAINTANCE 를 연기(DEFERRING)하라. 인덱스는 데이타가 insert하거나 delete 또는 key 컬럼이 업데이트 될때마다 자동으로 maintance 를 실시한다.따라서 많은 양의 데이타를 load할때 작업이 종료된 후에 maintance를 한다면 좀더 빠를 것이다. SKIP_INDEX_MAINTENANCE = TRUE  를 설정하면 인덱스 세그먼트의 상태가 “ INDEX UNUSABLE”상태가 되어있더라도 LOADER시작시에 인덱스 MAINTANCE를 SKIP한다.

 

 

5. UNRECOVERABLE 을 사용해서 REDO 생성을 DISABLE시킨다. 모든 recover 시에는 redo log파일이 필요하다. 그러나 redo log 생성은 부하가 많기 때문에 disable시키면 그만큼 속도는 빠르게 된다. 그러나 LOADER 작업 중간에 FAILURE 가 발생한다면 처음부터 load작업을 다시 해야한다. 따라서 리두로그를 생성하지 않기때문에 loader 작업 후에는 반드시 백업하도록 한다.

 

 

6. 단일 파티션에 loading 하도록 한다. 파티션 테이블에 데이타 load시 기타 사용자는 다른 파티션 에 접근 할 수 있다. APRIL 파티션을 로드시에 jan 에서 april 까지 쿼리를 실행하는 유저를 차단하지 못한다. 따라서 부하가 증가한다.

 

 

7. Parallel 로 로드를 한다. 파티션으로 구성되어 있다면 parallel 로 다중 파티션을 로드할 수 있다.

 

 

8. STREAMSIZE 파라미터는 SQL*LOADER client 에서 oracle server로 direct path stream buffer 의 크기(bytes)를 지정한다. 기본값은 256000 bytes 이다.  또한

columnarrayrows 또한 direct path column array 에 전송하는 row의 갯수를 지정한다.

기본값은 5000이다.

 

 

9. 만일 load되는 데이타가 중복되는 날자값을 많이 가지고 있다면 DATE_CACHE 파라미터를 설정해서 DIRECT PATH LOAD시에 더 나은 성능을 보장할 수 있다.

CACHE에 CONVERION 되는 DATE 의 사이즈(엔트리)를 지정한다. (기본값은 1000)