pq_distribute 힌트의 용도
- pq_distribute 힌트를 사용함으로써 옵티마이저의 선택을 무시하고 사용자가 직접 조인을 위한
데이터 분배 방식을 결정할 수 있다.
● 옵티마이져가 파티션된 테이블을 적절히 활용하지 못하고 동적 재분할을 시도할 때
● 기존 파티션 키를 무시하고 다른 키 값으로 동적 재분할하고 싶을 때
● 통계정보가 부정확하거나 통계정보를 제공하기 어려운 상황에서 실행계획을
고정시키고자 할 때
● 기타 여러 가지 이유로 데이터 분배 방식을 변경하고자 할 때
- 병렬 쿼리는 '분할&정복 원리'에 기초한다. 그 중에서도 병렬 조인을 위해서는
'분배&조인 원리'가 작동함을 이해하는 것이 매우 중요하다. 이때, pq_distribute 힌트는
조인에 앞서 데이터를 분배하는 과정에만 관여하는 힌트임을 반드시 기억할 필요가 있다.
- pq_distribute 힌트는 병렬 조인에 앞선 사전 정지 작업으로서 데이터를 어떻게 분배할지를
결정하는 힌트지, 조인 방식을 결정하는 힌트가 아니다.
구문 이해하기
- pq_distribute 힌트의 사용법
/*+PQ_DISTRIBUTE ( table, outer_distribution, inner_distribution) */
1. inner 테이블명 2.outer 테이블의 3. inner 테이블의
또는 alias distribution 방식 distribution 방식
분배방식 지정
- 분배 방식의 종류
● pq_distribute (inner, none, none )
- Full-Partition Wise 조인으로 유도할 때 사용한다. 당연히, 양쪽 테이블 모두 조인 컬럼에
대해 같은 기준으로 파티셔닝 돼 있을 때만 작동한다.
● pq_distribute (inner, partition, none )
- Partial-Partition Wise 조인으로 유도할 때 사용하며, outer 테이블을 inner 테이블 파티션
기준에 따라 파티셔닝하라는 뜻이다.
당연히, inner 테이블이 조인 키 컬럼에 대해 파티셔닝 돼 있을 때만 작동한다.
● pq_distribute (inner, none, partition )
- Partial-Partition Wise 조인으로 유도할 때 사용하며, inner 테이블을 outer 테이블
파티션 기준에 따라 파티셔닝하라는 뜻이다. 당연히, outer 테이블이 조인 키 컬럼에
대해 파티셔닝 돼 있을 때만 작동한다.
● pq_distribute (inner, hash, hash )
- 조인 키 컬럼을 해시 함수에 적용하고 거기서 반환된 값을 기준으로 양쪽 테이블을
동적으로 파티셔닝하라는 뜻이다.
● pq_distribute (inner, broadcast, none )
- outer 테이블을 Broadcast 하라는 뜻이다.
● pq_distribute (inner, none, broadcast )
- inner 테이블을 Broadcast 하라는 뜻이다.
pq_distribute 힌트를 이용한 튜닝 사례
- 통계 정보가 없는 상태에서 병렬 조인하면 옵티마이저가 아주 큰 테이블을 Broadcast 하는
경우를 종종 보게 된다. 임시 테이블을 많이 사용하는 야간 배치나 데이터 이해 프로그램에서
그런 문제가 자주 발생하는 이유가 여기에 있다.
- 10g부터는 통계정보가 없을 때 동적 샘플링이 일어나므로 그럴 가능성이 매우 낮아졌다.
하지만 테이블 간 조인을 여러 번 거치면 옵티마이저가 예상한 조인 카디널리티가 점점
부정확해지게 마련이다.
- 데이터 분포가 고르지 않은 컬럼이 조건절에 많이 사용되거나, 다른 테이블과 조인되기 전
인라인 뷰 내에서 많은 가공이 이루어져 정확한 카디널리티 계산이 어려울 때 이런 오류
발생 가능성은 더욱 커진다.
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 7-5. 병렬 처리에 관한 기타 상식 (0) | 2016.12.26 |
---|---|
성능고도화 7-3. 병렬 조인 (0) | 2016.12.26 |
성능고도화 7-2. 병렬 Order by 와 Group by (0) | 2016.12.26 |
성능고도화 7-1. 기본개념 (0) | 2016.12.26 |
성능고도화 6-3. 인덱스 파티셔닝 (0) | 2016.12.26 |