다른 명령
PQ_REPLICATE 힌트
- 12.1 버전에 PQ_REPLICATE 기능 추가
- BROADCAST 분배 방식 문제를 개선 하기 위함
- BROADCAST 분배 방식은 병렬 서버에서 테이블을 나눠서 읽은 후 다른 병렬 서버로 데이터를 분배하는 방식
- BROADCAST 할 테이블을 8GB로 가정하면 DOP가 8인 경우, 각각의 병렬 서버가 1GB씩 읽은 후 8개의 서버로 1GB씩 분배하므로 I/O는 8GB(1GB*8), 분배량은 64GB(1GB*8*8)
- DOP가 16인 경우에는 I/O는 동일하게 8GB(0.5GB*16)지만, 분배량은 128GB(0.5GB*16*16)로 증가
- DOP가 커질수록 전송량이 배수적으로 증가하는 구조
- 이런 현상을 해결하기 위해 추가된 기능이 PQ_REPLICATE 방식
- PQ_REPLICATE 방식은 각각의 병렬 서버에서 전체 테이블을 읽기 때문에 데이터 분배가 발생하지 않는다.
- DOP가 8, 16인 경우 각각 64GB(8GB*8), 128GB(8GB*16)의 I/O가 발생
- BROADCAST 분배 시 DOP가 높고 테이블 크기가 작은 경우 분배량 감소를 통한 성능 개선
- 반대로 잘못된 통계 정보로 인해 크기가 큰 테이블이 PQ_REPLICATE 방식으로 동작할 경우 과도한 I/O로 인해 성능이 저하될 수 있다.
- NO_PQ_REPLICATE 힌트를 사용하면 해당 기능의 동작을 제어할 수 있다.
SELECT /*+ ORDERED FULL(A) FULL(B) PARALLEL(A 8) PARALLEL(B 8) USE_HASH(B) PQ_DISTRIBUTE(B BROADCAST NONE) NO_PQ_REPLICATE(B) */ * FROM t1 a , t2 b WHERE b.c1 = a.c1; ------------------------------------------------------------------------- | Id | Operation | Name | TQ |IN-OUT| PQ Distrib | ------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | | 1 | PX COORDINATOR | | | | | | 2 | PX SEND QC (RANDOM) | :TQ10001 | Q1,01 | P->S | QC (RAND) | |* 3 | HASH JOIN | | Q1,01 | PCWP | | | 4 | PX RECEIVE | | Q1,01 | PCWP | | | 5 | PX SEND BROADCAST | :TQ10000 | Q1,00 | P->P | BROADCAST | | 6 | PX BLOCK ITERATOR | | Q1,00 | PCWC | | | 7 | TABLE ACCESS FULL| T1 | Q1,00 | PCWP | | | 8 | PX BLOCK ITERATOR | | Q1,01 | PCWC | | | 9 | TABLE ACCESS FULL | T2 | Q1,01 | PCWP | | -------------------------------------------------------------------------