더북(TheBook)

병렬 쿼리를 사용할 때와 구문 형식은 비슷한데 한 가지 주의할 점이 있다.

첫째, ALTER SESSION 명령어를 사용해 병렬 DML을 활성화해 놓으면, 그 뒤부터 수행되는 모든 DML문은 병렬로 처리된다. 위의 예제처럼 INSERT와 UPDATE문이 있다면 두 문장 모두 병렬로 처리되는데, 반드시 하나의 DML문이 끝날 때마다 COMMIT문을 실행해야 한다. 만약 그렇지 않으면 “ORA-12838: 병렬로 수정한 후 객체를 읽거나 수정할 수 없습니다” 라는 오류가 발생한다.

따라서 병렬 DML은 트랜잭션 처리를 수행하는 프로시저에 사용하면 안 되고 대량의 데이터를 처리하지만 트랜잭션 관리가 문제가 되지 않을 때 즉 특정 테이블에서 대량의 데이터를 삭제한 다음 다시 적재할 때 한해서 사용하는 것이 좋다.

둘째, 병렬로 처리하는 DML문 중에 SELECT문이 포함되어 있으면(INSERT ~ SELECT, MERGE문의 USING 절에 SELECT 문이 있을 때 서브 쿼리가 포함된 때 등) SELECT문에 PARALLEL 힌트를 같이 주는 것이 좋다. 가령 INSERT ~ SELECT의 경우, SELECT한 결과를 INSERT하는 것인데 SELECT는 단일 프로세스가 처리하고 INSERT는 여러 개의 프로세스가 처리하면 생각만큼 성능이 향상되지 않는다. 따라서 SELECT도 병렬로 처리하고 INSERT도 병렬로 처리하도록 SELECT 문에 PARALLEL 힌트를 적용하는 것이 좋다. 물론 ‘ALTER SESSION FORCE PARALLEL QUERYPARALLEL’ 명령어를 실행하면 자동으로 병렬 쿼리가 실행되므로 별도로 힌트를 줄 필요는 없으며, 프로세스(degree) 수는 병렬 DML의 프로세스 수와 맞춰주는 것이 좋다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.