본문 바로가기

IT관련

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

Oracle 12.1 버전부터 병렬처리 실행계획(Plan) 상에 PX SELECTOR 라는 것이 추가되었습니다.

QC(Query Coordinator)가 하던 역할을 일부 떼어서 Parallel Process 가 하도록 바꾼 것인데, 이렇게 바꾸면서 불필요하게 Buffer Sort 하던 작업을 없애버려 결과적으로는 약간의 성능이 개선되는 효과를 가져왔습니다.

 

아래에서 확인할 수 있는데,

왼쪽은 optimizer_features_enable 파라메타를 조정해서 11g 환경으로 세팅한 것이고, 오른쪽은 19c 환경입니다.

 

 

아래 SQL문을 11g 환경에서 실행했을때는 0.67초가 걸렸고, 19c 환경에서는 0.45초가 걸렸습니다.

 

select /*+ monitor ordered parallel(a 4) */ count(*) 
from EMP_BIG a, EMP_BIG b
where a.empno = b.empno;

 

EMP_BIG 테이블을 두번 읽어서 Hash Join 하는 SQL 입니다.

첫번째 읽을때(a)는 parallel 4 로 읽고, 두번째 읽을때(b)는 Serial 하게 읽습니다.

여기 Serial 하게 읽는 부분에서 옛날에는 불필요한 BUFFER SORT 과정이 들어갔었습니다.

어차피 Hash Join 하는데 두번째 읽은것을 굳이 또 왜 소팅하는 건지 모르겠는데, 어쨌든 이 과정이 없어졌습니다. 이 부분에서 성능의 차이가 발생합니다.

 

 

또, QC 가 Serial Read 를 처리하던 작업이 Parallel Server 프로세서로 넘어갔습니다.

SQL 모니터로 조회해보면 이를 명확히 확인할 수 있습니다.

 

11g 에서는 PX Coordinator (QC) 가 Serial Read 를 처리하는 것을 확인할 수 있습니다.

 

19c (12c 이상) 에서는 Parallel Processor 들이 1 Set 더 사용되었고, 이들 중 한개의 프로세서(여기서는 p005)가 Serial Reading 작업을 QC 대신 하고 있는것을 확인할 수 있습니다.

 

 

이 예제에서는 Hash Join 을 하면서 Parallel Processor 들을 1 Set 더 사용하였지만, Join 이 아닌 경우에서는 추가로 Parallel Processor 들을 띄우지 않고, 기존 Parallel Processor 들중에 하나가 이 작업을 대신하게 됩니다.

 

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