Oracle 병렬처리 Parallel 사용


Oracle DBMS에서 병렬처리를 할 수 있게 해주는 Parallel에 대해 적고자 합니다.

최근에 작업을 하면서, Oracle에서 SQL을 사용하는 일이 굉장히 많은 상황인데

아무리 where조건을 걸어도 속도가 굉장히 오래 걸리는 경우가 있는데

그나마 튜닝을 계속해보다가 찾아낸 것이 병렬처리 방법이다.

원래라면 1개의 SQL문 처리를 위해서 1개의 프로세스를 띄우겠지만

이를 병렬적으로 처리를 하게 된다면 속도가 올라가게 될 것이다.

물론 엄청 오래 걸리는 쿼리는 엄청 오래 걸리고, 잘못 시도했다가

DB 시스템이 뻗을수 있다고 하니, 사전에 인프라쪽에 가이드를 받아서 최대 사용 가능 숫자를 무조건 가이드 받도록 하자.

(인덱스 힌트나, 파티션 지정 등으로 최대한 전체 데이터 쿼리 수행은 피하도록 하자, DB가 뻗으면 꽤나 골치 아프다…)


사용하는 방법은 굉장히 간단한 것이

select * 대신에 select /*+ parallel(16) */ * ~ 로

중간에 parallel이라고 쓰인 부분을 넣으면 된다

괄호 안에 숫자를 집어 넣지 않아도 되지만,

이러한 경우에는 시스템 디폴트 갯수만큼 되는데, 이게 상당히 크기 때문에

왠만하면 괄호를 통해서 병렬프로세스 갯수를 지정하는 것이 좋다고 한다.


단, 이렇게 갯수를 지정해줬다고 해서, 반드시 16개 모두 사용하는 것이 아니라

시스템 자원 리소스 여유 상황에 따라서 자동으로 조정을 하기 때문에

시스템 상황에 따라 완료 속도가 다를 수 있다.