Direct-Load INSERT란
'INSERT ... SELECT ...' 구문으로 데이터를 입력할 때 버퍼 캐시를 통하지 않고
직접 블록을 만들어 데이터 파일에 기록함으로써 빠른 속도를 끌어내는 방법이다.
또한 리두 로그 정보를 생성하지 않도록 하거나 병렬 처리도 가능하기 때문에 더욱 성능을 높일 수 있다.
그러나 속도가 빠른 만큼 치러야 할 대가도 있다.
일반적인 INSERT는 HWM(High Water Mark) 이하의 빈 공간을 사용할 수 있지만
Direct-Load INSERT로 처리할 때에는 HWM 아래 쪽의 여유 공간을 활용하지 못한다.
게다가 파티션 테이블이 아닌 경우 병렬 Direct-Load INSERT를 사용하면
HWM 이상의 빈 공간까지 무시하고 새로운 익스텐트를 할당 받기 때문에 공간의 낭비가 더욱 심해진다.
Direct-Load INSERT를 쓰려면 일반적인 경우에는 APPEND,
병렬로 처리할 때에는 PARALLEL 힌트를 사용해서 지시한다.
명령문의 예는 다음과 같다.
INSERT INTO emp SELECT /*+ APPEND */ * FROM new_emp;
ALTER SESSION ENABLE PARALLEL DML;
INSERT /*+ PARALLEL(emp, 5) */ INTO emp
SELECT /*+ PARALLEL(new_emp, 5) */ * FROM new_emp;
SQL*Loader에도 비슷한 기능이 있다.
SQL*Loader는 사진과 같은 바이너리 파일도 처리할 수 있지만 많이 이용되지는 않고
주로 텍스트 파일을 데이터베이스에 올리는데 사용되는 프로그램이다.
외부 파일에 있는 데이터를 오라클에 입력하기 위한 수단으로
SQL*Loader의 Direct Path 속도를 당해낼 상대는 없다.
개인적으로는 오라클 제품 중에서 가장 완성도가 높은 프로그램으로 SQL*Loader를 꼽고 싶다.
SQL*Loader를 실행할 때에는 Conventional Path와 Direct Path의 두 가지 방법을 선택할 수 있다.
Conventional Path는 평범한 INSERT 문을 이용하여 데이터를 입력하는 방식이고
Direct Path는 Direct-Load INSERT와 유사하게 직접 데이터 블록을 만들어 기록하는 방식이다.
데이터가 적은 경우에는 차이를 느낄 수 없지만 많을 때에는 Direct Path의 속도가 월등히 빠르다.
출처: korea.internet.com
'INSERT ... SELECT ...' 구문으로 데이터를 입력할 때 버퍼 캐시를 통하지 않고
직접 블록을 만들어 데이터 파일에 기록함으로써 빠른 속도를 끌어내는 방법이다.
또한 리두 로그 정보를 생성하지 않도록 하거나 병렬 처리도 가능하기 때문에 더욱 성능을 높일 수 있다.
그러나 속도가 빠른 만큼 치러야 할 대가도 있다.
일반적인 INSERT는 HWM(High Water Mark) 이하의 빈 공간을 사용할 수 있지만
Direct-Load INSERT로 처리할 때에는 HWM 아래 쪽의 여유 공간을 활용하지 못한다.
게다가 파티션 테이블이 아닌 경우 병렬 Direct-Load INSERT를 사용하면
HWM 이상의 빈 공간까지 무시하고 새로운 익스텐트를 할당 받기 때문에 공간의 낭비가 더욱 심해진다.
Direct-Load INSERT를 쓰려면 일반적인 경우에는 APPEND,
병렬로 처리할 때에는 PARALLEL 힌트를 사용해서 지시한다.
명령문의 예는 다음과 같다.
INSERT INTO emp SELECT /*+ APPEND */ * FROM new_emp;
ALTER SESSION ENABLE PARALLEL DML;
INSERT /*+ PARALLEL(emp, 5) */ INTO emp
SELECT /*+ PARALLEL(new_emp, 5) */ * FROM new_emp;
SQL*Loader에도 비슷한 기능이 있다.
SQL*Loader는 사진과 같은 바이너리 파일도 처리할 수 있지만 많이 이용되지는 않고
주로 텍스트 파일을 데이터베이스에 올리는데 사용되는 프로그램이다.
외부 파일에 있는 데이터를 오라클에 입력하기 위한 수단으로
SQL*Loader의 Direct Path 속도를 당해낼 상대는 없다.
개인적으로는 오라클 제품 중에서 가장 완성도가 높은 프로그램으로 SQL*Loader를 꼽고 싶다.
SQL*Loader를 실행할 때에는 Conventional Path와 Direct Path의 두 가지 방법을 선택할 수 있다.
Conventional Path는 평범한 INSERT 문을 이용하여 데이터를 입력하는 방식이고
Direct Path는 Direct-Load INSERT와 유사하게 직접 데이터 블록을 만들어 기록하는 방식이다.
데이터가 적은 경우에는 차이를 느낄 수 없지만 많을 때에는 Direct Path의 속도가 월등히 빠르다.
출처: korea.internet.com