병렬 order by 와 Group by
- P -> P 데이터 재분배는 주로 병렬 order by, 병렬 group by, 병렬 조인을 포함한 SQL에서
나타난다. 아주 단순한 SQL이 아니고서야 대부분 이들 오퍼레시연을 포함하므로
거의 모든 병렬 SQL에서 Inter-Operation Parallelism이 일어난다고 보면 틀림 없다.
병렬 Order by
- order by를 병렬로 수행하려면 테이블 큐를 통한 테이터 재분배가 필요한데, 쿼리 수행이
완료된 직후에 같은 세션에서 v$pq_tqstat를 쿼리해 보면 아래와 같이 테이블 큐를 통한
데이터 전송 통계를 확인해 볼 수 있다.
- 병렬 쿼리 수행 속도가 예상만큼 빠르지 않다면 테이블 큐를 통한 데이터 전송량에 편차가
크지 않은지 확인해 볼 필요가 있는데, 그럴 때 v$pq_tqstat 뷰가 유용하게 쓰인다.
병렬 Group by
- order by 와 group by를 병렬로 처리하는 내부 수행원리는 기본적으로 같다
Group by가 두 번 나타날 때의 처리 과정
- 병렬 Group by 실행계획에 아래와 같이 group by가 두 번 나타나는 경우가 있다.
비밀은 group 기준 컬럼의 선택도에 있다.
- group by절에서 있는 컬럼은 일반적으로 선택도가 pk 보다 낮기 때문에 해당 컬럼을 기준으로
첫 번째 서버 집합이 읽은 데이터를 먼저 group by 하고 나서 두 번째 서버 집합에 전송한다면
프로세스간 통신량이 줄어 그만큼 병렬 처리 과정에서 생기는 병목을 줄일 수 있다.
- 참고로, 선택도가 낮은 컬럼으로 group by 할 때도 강제로 이 방식을 사용하도록 하려면
' _groupby_nopushdown_cut_ration ' 파라미터를 0으로 세팅하면 된다.
이 파라미터의 기본 값인 3은 group by 기준 컬럼의 선택도에 따라 옵티마이저가 방식을
결정하도록 하는 것이다.
- 참고로, 11g에서는 gby_pushdown, no_gby_pushdown 힌트가 추가돼 파라미터 변경 없이도
사용자가 group by 방식을 조정할 수 있게 되었다.
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 7-4 PQ_DIstribute 힌트 (0) | 2016.12.26 |
---|---|
성능고도화 7-3. 병렬 조인 (0) | 2016.12.26 |
성능고도화 7-1. 기본개념 (0) | 2016.12.26 |
성능고도화 6-3. 인덱스 파티셔닝 (0) | 2016.12.26 |
성능고도화 6-2. 파티션 Pruning (0) | 2016.12.26 |