h1.PQ_DISTRIBUTE 힌트
h3.PQ_DISTRIBUTE 힌트의 용도
1. 옵티마이져가 파티션된 테이블을 적절히 활용하지 못하고 동적 재분할을 시도할 때
2. 기존 파티션 키를 무시하고 다른 키 값으로 동적 재분할하고 싶을 때
3. 통계정보가 부정확하거나 통계정보를 제공하기 어려운 상황에서 실행계획을 고정시키고자 할 때
4. 기타 여러 가지 이유로 데이터 분배 방식을 변경하고자 할 때
SQL> SELECT /*+ gather_plan_statistics LEADING( D ) USE_MERGE( E ) FULL( D ) FULL ( E ) PARALLEL(D 4) PARALLEL(E 4) PQ_DISTRIBUTE(E ,HASH, HASH ) */COUNT(*)
2 FROM DEPT_NOPARTITION D, EMP_NOPARTITION E
3 WHERE E.DEPTNO = D.DEPTNO;
COUNT(*)
----------
4000000
SQL> @XPLAN
----------------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | 1Mem | Used-Mem | Used-Tmp|
----------------------------------------------------------------------------------------------------------------------------------------------
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:10.91 | 8 | | | | |
| 2 | PX COORDINATOR | | 1 | | 4 |00:00:10.80 | 8 | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10002 | 0 | 1 | 0 |00:00:00.01 | 0 | | | | |
| 4 | SORT AGGREGATE | | 0 | 1 | 0 |00:00:00.01 | 0 | | | | |
| 5 | MERGE JOIN | | 0 | 2888K| 0 |00:00:00.01 | 0 | | | | |
| 6 | SORT JOIN | | 0 | 4 | 0 |00:00:00.01 | 0 | 2048 | 2048 | 2048 (0)| |
| 7 | PX RECEIVE | | 0 | 4 | 0 |00:00:00.01 | 0 | | | | |
| 8 | PX SEND HASH | :TQ10000 | 0 | 4 | 0 |00:00:00.01 | 0 | | | | |
| 9 | PX BLOCK ITERATOR | | 0 | 4 | 0 |00:00:00.01 | 0 | | | | |
|* 10 | TABLE ACCESS FULL| DEPT_NOPARTITION | 0 | 4 | 0 |00:00:00.01 | 0 | | | | |
|* 11 | SORT JOIN | | 0 | 2888K| 0 |00:00:00.01 | 0 | 69M| 2879K| 21M (1)| 16384 |
| 12 | PX RECEIVE | | 0 | 2888K| 0 |00:00:00.01 | 0 | | | | |
| 13 | PX SEND HASH | :TQ10001 | 0 | 2888K| 0 |00:00:00.01 | 0 | | | | |
| 14 | PX BLOCK ITERATOR | | 0 | 2888K| 0 |00:00:00.01 | 0 | | | | |
|* 15 | TABLE ACCESS FULL| EMP_NOPARTITION | 0 | 2888K| 0 |00:00:00.01 | 0 | | | | |
----------------------------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
10 - access(:Z>=:Z AND :Z<=:Z)
11 - access("E"."DEPTNO"="D"."DEPTNO")
filter("E"."DEPTNO"="D"."DEPTNO")
15 - access(:Z>=:Z AND :Z<=:Z)
Note
-----
- dynamic sampling used for this statement
39 개의 행이 선택되었습니다.
PQ_DISTRIBUTE 힌트는 병렬 조인에 앞선 사전 정지 작업으로서 데이터를 어떻게 분배할지를 결정하는 힌트지, 조인 방식을 결정하는 힌트가 아니다.
h3.구문 이해하기
/*+ PQ_DISTRIBUTE( TABLE, OUTER_DISTRIBUTION, INNER_DISTRIBUTION ) */
여기 구문이해 jpg