본문 바로가기

IT관련

오라클 병렬처리(Parallel Processing) 개념 및 용어 정리, 종합페이지

Oracle DB 에서 SQL문을 만들면서 빠르게 실행하기 위해서 우리는 튜닝(Tuning)을 합니다.

SQL튜닝을 하다하다 마지막으로 시도하는 것이 "병렬처리(Parallel Processing)" 입니다.

 

마지막으로 시도하는 이유는 이게 시스템 자원을 많이 쓰기 때문입니다.

1개의 SQL문을 처리하기 위해 1개의 프로세스를 띄워서 일해야 하는데, 빨리 실행하기 위해 8개, 16개, 50개, 100개의 프로세스를 병렬로 동시에 띄워서 내 SQL을 처리합니다. 당연히 빠르겠죠~ ㅎㅎ

하지만, 이렇게 병렬로 실행하도록 만들어 놓은 SQL을 한꺼번에 여러명이 동시에 실행해버리면??? 다이~

죽을 수 있습니다. DB가.. 시스템이 뻗을 수 있습니다. ㅋㅋ 

 

당연히 병렬처리 기술을 사용할 때는 SQL이 동시에 많이 실행되는 OLTP 환경에서는 자제해야 하고,

큰 SQL을 From time to time 실행하는 DW 환경에서는 많이들 사용하죠~

 

사용하는 방법은 무지 쉽습니다.

SQL문에 /*+ parallel(..) */ 힌트만 주면 끝~

 

SQL> select /*+ parallel(8) */ ..
     from EMP;
 

 

 

parallel 힌트 사용할때 인자(argument)에다가 뭘 주는지에 따라 여러가지 활용이 있습니다만,

잘 모르는 경우는 아무 생각없이 parallel 이라고만 써도 병렬로 돌아간다는거...

 

/*+ parallel */

/*+ parallel(10) */

/*+ parallel(EMP, 10) */

 

위와 같이 병렬프로세스 갯수를 지정하지 않을 수도 있고, 지정할 수도 있고, 테이블을 지정할 수도 있습니다.

단, 위 첫번째 경우처럼 병렬프로세스 갯수를 지정하지 않으면 병렬프로세스가 시스템디폴트 갯수만큼 기동될 수 있습니다. 이게 좀 큽니다. 따라서 왠만하면 병렬프로세스 갯수를 지정하는 것이 좋습니다.

 

 

내가 병렬프로세스 갯수를 위와같이 10 이라고 줬다고 해서 반드시 10개가 뜨는 것은 아닙니다.

Oracle 이 시스템 파라메타 설정에 따라 또는 시스템 자원 리소스 여유상황에 따라 자동으로 조정합니다.

따라서, 병렬프로세스가 얼마나 뜨는지 실제로 확인해 보는게 좋습니다.

이걸 확인해보는 가장 좋은 방법은 Trace 를 떠보거나 Realtime SQL Monitoring 을 이용하는 것입니다.

 

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

 

Realtime SQL Monitoring 에서 보면 아래와 같이 병렬처리 프로세스들이 어떻게 일했는지 정확히 확인할 수 있습니다.

 

 

 

병렬처리에 대해 설명된 문서들을 찾아보다 보면 자주 접하게되는 용어가 있습니다.

QC, Consumer, Producer 라는 용어입니다.

 

(출처 : Oracle Document)

 

테이블에서 데이터를 읽는 작업을 하는 병렬프로세서들을 Producer 라고 하고, 이 읽은 데이터를 받아서 Sorting(정렬), DML, DDL, Join 등을 수행하는 작업을 하는 병렬프로세들을 Consumer 라고 합니다.

그리고, 작업된 결과들을 취합(통합)하는 작업을 하는 프로세서가 있는데 이를 QC(Query Coordinator) 라고 합니다.

병렬처리 힌트 쓰는데, 당장 이런걸 꼭 알 필요는 없지만,

병렬처리 관련해서 구글링하다보면 영어문서에는 이런 용어들이 빈번하게 나오기 때문에 잘 알아둘 필요가 있겠습니다.

 

 

병렬처리와 관련하여 추가적으로 아래와 같은 개념들을 알면 더 효과적으로 병렬처리를 활용할 수 있습니다.

 

> 오라클 병렬처리 Parallel DOP (Degree of Parallelism)

 

> 오라클 Parallel 병렬처리 Default DOP (Default Degree of Parallelism)

 

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

 

> 오라클 Parallel DML 주의 사항 (ORA-12838 : cannot read/modify)

 

> 병렬처리, Parallel Join 에서 /*+ pq_distribute(,,) */ 힌트

 

> 병렬처리(Parallel Processing)관련 주의 사항 (degree)

 

> 병렬처리(Parallel Processing)관련 주의 사항 (default degree)

 

> PL/SQL 함수(Function) 병렬처리 옵션 (parallel_enable)

 

> 병렬처리 Plan 개선 (PX SELECTOR) - Oracle 12c 신기능

> 병렬처리 Union All 성능향상 (PQ_CONCURRENT_UNION) - Oracle 12c 신기능