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 들중에 하나가 이 작업을 대신하게 됩니다.
참고 ▶▶▶ 오라클 병렬처리 종합페이지
'IT관련' 카테고리의 다른 글
오라클 Real-Time SQL Monitoring (실시간 Plan, Trace 툴) 19c 기능개선 부분 (1) | 2022.10.30 |
---|---|
오라클 병렬처리 Union All 성능향상 (PQ_CONCURRENT_UNION) - Oracle 12c 신기능 (0) | 2022.10.21 |
오라클 에러 정보 (ORA-27104) - system-defined limits for shared memory was misconfigured (0) | 2022.10.14 |
오라클 Foreign Key 구조(관계) 파악 가능한 프로그램 (FKManager) (0) | 2022.07.10 |
SQL Developer Data Modeler 이용한 리버스 엔지니어링 방법 (DB에서 ERD 생성) (0) | 2022.07.09 |