본문 바로가기

IT관련

오라클 Parallel DML 처리 방법 및 주의 사항 - enable parallel dml

Oracle DB 에서 병렬처리 작업시 /*+ parallel(...) */ 힌트를 사용합니다.

조회 Query SQL 이나 Insert/Update/Delete/Merge 같은 DML SQL 이나 Parallel 힌트 주는 것은 똑같습니다.

 

근데, Parallel DML 의 경우 깜빡하는 부분이 alter session 을 해주는 부분입니다.

Insert/Update/Delete/Merge 같은 DML SQL 을 병렬처리 하고자 하는 경우에는 반드시 alter session parallel dml enable; 을 해줘야 병렬로 동작합니다.

 

12c DB 부터는 이걸 힌트에 삽입할 수 있는 방법이 생겼습니다.  /*+ enable_parallel_dml */ 과 같이 해주면 alter session 을 한 것과 같은 효과를 발휘합니다.

 

 

정리하면, Oracle DB 에서 Parallel DML 하는 경우 아래와 같이 2가지 방식으로 처리할 수 있습니다.

 


1) 
alter session enable parallel dml;

insert /*+ parallel(8) */ into TEST2
select * from TEST1;


2)
insert /*+ enable_parallel_dml parallel(8) */ into TEST2
select * from TEST1;

 

 

병렬처리가 잘 되고 있는지는 v$pq_sysstat 딕셔너리뷰를 조회하면 알 수 있습니다.

"Server Busy" 항목이 0 -> 8 로 변경됩니다.

 

 

위와같이 v$pq_sysstat 딕셔너리를 조회하는 경우, 여러 사람이 작업하는 경우에는 저 병렬서버들이 내 SQL 인지 다른 사람꺼인지 구분하기 어려운 경우가 있습니다.

 

 

가장 정확히 확인할 수 있는 방법은 SQL Trace 에서 확인하거나 Realtime SQL Monitor 로 확인하는 것입니다.

 

참고 => 오라클 Plan, Trace 쉽게 보는 - Realtime SQL Monitoring