본문 바로가기

IT관련

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

DOP 란 Degree Of Parallelism 의 약어로, 병렬도라고 합니다. 병렬처리할 때 병렬프로세스를 몇개 띄울 것인지를 의미합니다. DOP 가 20 이면 20개의 병렬프로세스를 띄워서 작업한다는 의미입니다.

 

오라클에서 병렬처리는 DB서버의 자원(CPU, Memory, Disk I/O)을 최대한 사용해서 작업을 빠르게 끝낼 수 있는 아주 유용한 기능입니다.

 

하지만, 조심해야 할 부분이 하나의 작업에 대해서만 병렬처리를 하면 문제없지만, 동시에 수십개의 병렬처리가 돌아가는 상황이 발생한다면? ㅋㅋ  장애로 이어질 수 있겠죠...

 

이런 일이 종종 발생합니다.

개발자가 어플리케이션의 SQL에 /*+ parallel */ 힌트를 박아놨는데, 이 어플리케이션이 뜻하지 않게 너무 많이 실행되는 경우 ㅎㅎ 난리가 날겁니다.

또, DBA가 테이블을 옮기는 작업을 하면서 테이블을 parallel 옵션을 주어 생성해두었다가 이를 안고친 경우,

이 경우 이 테이블에 Access 하는 SQL에 대해 Parallel 처리를 하게되어, 영문도 모르게 병렬처리가 너무 많이 실행되는 사태가 발생하곤 합니다.

 

테이블의 경우 아래와 같이 user_tables 딕셔너리에서 degree 값을 조회하면 됩니다.

 

 

이 degree 값이 테이블의 DOP(병렬도, Degree Of Parallelism)를 나타냅니다.

지금은 1 로 세팅되어 있어 병렬처리를 하지 않습니다. 

 

아래와 같이 alter table ~ parallel 커맨드로 테이블의 DOP를 변경할 수 있습니다.

 

 

DOP를 4 로 세팅했습니다. user_tables 딕셔너리의 degree 값이 4 로 바껴있는 것을 확인할 수 있습니다.

여기에서는 기존 테이블을 alter table 커맨드로 변경했지만, 일반적으로는 create table .. 커맨드로 처음에 테이블 생성작업할 때 parallel 옵션을 주었다가 이게 계속 남아있는 경우가 많습니다.

이걸 모르고 그대로 놔두면 종종 장애를 경험하는 불상사가 생깁니다. ㅋㅋ

 

위에서는 4 로 작은값이 세팅되어 있지만, 20, 32 등 큰 값으로 세팅되어 있는 경우도 종종 봤습니다.

그럼, 세션당 한번에 병렬프로세스가 20개, 32개 씩 뜬다는 얘기입니다.

여러 세션에서 동시에 실행한다면...? 몇백개씩 프로세스가 뜬다고 생각하면 ? 뜨악~

 

 

실제로 병렬처리가 일어나는지 Plan 을 체크해보겠습니다.

 

 

set autotrace on  커맨드를 실행해주면, 이후에 실행되는 모든 SQL문에 대해 실행 후, Plan 정보를 함께 보여줍니다.

Execution Plan 정보를 보면 PX COORDINATOR 가 나오는 걸로 보아 병렬처리를 했음을 알 수 있습니다.

밑에 Note 섹션에 DOP 4 로 실행되었다고 적혀져 나오네요.

 

원래 싱글일 때와 비교해보면 확실히 다른 것을 확인할 수 있습니다.

 

 

싱글처리할 때는 PX Coordinator 얘기도 없고, Note 섹션이 아예 안나오네요.

싱글처리로 바꾸는 Table 의 degree 를 초기화하는 방법은 위에서처럼 alter table ... parallel 1; 이라고 해도 되고,

alter table ... noparallel; 이라고 해도 같은 겁니다.

 

 

참고 ▶Default DOP 보기

참고 ▶ 오라클 병렬처리 종합페이지