OLTP는 기준성데이터, 특정 고객, 특정 상품, 최근 거래 등을 반복적으로 읽어 버퍼캐시가 성능 향상에 도움을 준다.
DW/OLAP 이나 배치 프로그램에서 사용하는 SQL은 주로 대량 데이터를 처리하기 때문에 버퍼캐시를 경유하는 I/O 매커니즘이 오히려 성능을 떨어뜨릴 수 있다.
오라클은 버퍼캐시 경유하지 않고 곧바로 데이터 블록 읽고 쓸 수 있는 Direct Path I/O 기능을 제공한다.
Direct Path Insert 방식을 쓰면, 대량 데이터를 일반 INSERT 보다 빨리 입력 가능.
alter table t NOLOGGING;
Array Processing 도 Direct Path Insert 방식으로 처리가능함. append_values
힌트 사용하면 된다.
update, delete는 기본적으로 Direct Path Write가 불가능함.
방법은 DML로 처리해야 한다.
병렬처리는 대용량 데이터가 전제이므로 오라클은 병렬 DML에 항상 Direct Path Write 방식을 사용해야 한다.
DML을 병렬로 처리하면 병렬 DML을 활성화 해야함.
alter session enable parallel dml;
각 DML 문에 parallel 또는 full parallel 힌트 사용.
그러면 대상 레코드 찾는 작업은 물론 데이터 추가,변경,삭제도 병렬로 진행한다
insert **/*+ parallel(c 4) */** into 고객 c
select /*+ full(o) parallel(o 4) */ * from 외부가입고객 o;
update **/*+ full(c) parallel(c 4) */** 고객 c set 고객상태코드 = 'WD'
where 최종거래일시 < '20100101';
delete **/*+ full(c) parallel(c 4) */** from 고객 c
where 탈퇴일시 < '20100101';
힌트를 썻는데 병렬 DML 활성화 안하면 찾는 작업은 병렬로 하나, 추가/변경/삭제는 QC가 혼자 담당해서 병목생긴다.
병렬 insert는 append 힌트 지정 안해도 direct path insert 방식을 쓴다.
그러나 혹시나 대비하여 append 힌트를 쓰는게 좋다.
12C부터는 enable_parallel_dml 힌트도 지원한다.
DML 작업을 각 병렬 프로세스가 잘 처리하는지 QC가 처리하는지는 실행계획에서 확인 가능.