병렬 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 방식을 조정할 수 있게 되었다. 

+ Recent posts