No. 11658
Direct mode에서의 parallel Data Loading =======================================
SQL*Loader는 동일 table에 대한 direct mode에서의 parallel data load를 지원하고 있다. 이는 여러 session에서 동시에 데이타를 direct mode로 올림으로써 대용량의 데이타의 로드 속도를 향상시킬 수 있다. 특히, data file을 물리적으로 다른 disk에 위치시킴으로써 더욱 큰 효과를 낼 수 있다.
1. 제약사항 - index가 없는 table에만 로드 가능 - APPEND mode에서만 가능. (replace, truncate, insert mode는 지원 안됨) - parallel query option이 설치되어 있어야 함.
2. 사용방법
각각의 data file을 load할 control file들을 생성한 후, 차례차례 수행하면 됨.
$sqlldr scott/tiger control=load1.ctl direct=true parallel=true& $sqlldr scott/tiger control=load2.ctl direct=true parallel=true& $sqlldr scott/tiger control=load3.ctl direct=true parallel=true
3. constraint
- enable parameter를 사용하면 데이타 로드 작업이 모두 끝난 후, 자동으로 constraint을 enable시켜 준다. 그러나 종종 enable되지 못하는 경우가 있으므로 반드시 status를 확인해야 한다.
- primary key 나 unique key constraint이 걸려 있는 경우, 데이타 로드 후 자동으로 enable할 때, index를 생성하느라 시간이 많이 소모될 수 있다. 따라서 data만 parallel direct 모드로 로드 한 후, index를 따로 parallel로 생성하는 것이 성능 측면에서 바람직하다. 4. storage 할당 방법 및 주의사항
direct로 데이타를 로드하는 경우 다음 절차를 따라 작업한다. - 대상 table의 storage 절에 기초해 temporary segment를 생성한다. - 마지막 데이타 로드 작업이 끝난 후, 마지막에 할당되었던 extent의 비어 있는 즉, 사용하지 않은 부분을 trim 한다. - temporary segment에 해당되어 있는 extent들의 header 정보를 변경하고, HWM 정보를 수정하여, 대상 table에 extent가 소속되도록 한다. 이러한 extent 할당 방법은 다음과 같은 문제를 야기시킨다.
- parallel data load에서는 table 생성 시 할당된 최초 INITIAL extent를 사용하지 않는다. - 정상적인 extent 할당 rule을 따르지 않고, 각 process는 next extent에 정의된 크기를 할당하여 data load를 시작하고, 새로운 extent가 요구될 때에는 pctincrease 값을 기준으로 할당되게 되는데, 이는 process 간에 독립적으로 계산되어진다. - fragmentation이 심하게 발생할 수 있다. fragmentation을 줄이고, storage 할당을 효율적으로 하기 위해서는
- INITIAL을 2-5 block 정도로 작게 하여 table을 생성한다. - 7.2 이상 버젼에서는 options 절에서 storage parameter를 지정하여 사용한다. 이 때 initial과 next를 동일한 크기로 주는 것이 바람직하다.
OPTIONS (STORAGE=(MINEXTENTS n MAXEXTENTS n INITIAL n [K|M] NEXT n [K|M] PCTINCREASE n)) - options 절을 control file에 기술하는 경우 반드시 insert into tables 절 다음에 기술해야 한다.
|