Group By Push Down
Parallel Query 에서 GROUP BY 를 슬레이브 단에서 미리 수행해 Table Queue 로 전달되는 데이터 건수를 줄이는 변환입니다. GBY_PUSHDOWN 힌트로 선 GROUP BY → 후 GROUP BY 두 단계로 분리되어 일량이 감소합니다.
Group By Push Down
Parallel Query 에서 슬레이브 단의 선 GROUP BY 로 데이터를 줄인 뒤 Table Queue 로 전달해 일량을 감소시키는 변환입니다.
핵심 정리
- Group By Push Down 이란 GROUP BY 를 미리 수행하여 데이터 건수를 대폭 줄인 후에 Table Queue 에 데이터를 전달함으로써 일량을 줄이는 목적입니다.
- Group By Push Down 은 Parallel Query 에 GROUP BY 가 포함되어 있는 경우 발생합니다.
- 선 GROUP BY 를 했을 때 확실히 줄어드는 경우에 적용해야 합니다.
- Disk 에서 Sorting 이나 Hash 작업이 발생하는 경우 PGA 튜닝도 함께 해야 합니다.
원본 쿼리
1
2
3
4
SELECT /*+ FULL(a) PARALLEL(a 4) GBY_PUSHDOWN */
a.prod_id, count(*) cnt
FROM sales a
GROUP BY a.prod_id;
원본 쿼리 플랜
1
2
3
4
5
6
7
8
9
10
11
12
13
----------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
----------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 379 |
| 1 | PX COORDINATOR | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 72 | 288 | 379 |
| 3 | HASH GROUP BY | | 72 | 288 | 379 | ← 원래 GROUP BY 가 일어나야 할 플랜에서 GROUP BY 가 일어납니다.
| 4 | PX RECEIVE | | 72 | 288 | 379 |
| 5 | PX SEND HASH | :TQ10000 | 72 | 288 | 379 | ← 6번에서 TQ10000 에게 데이터를 전달하기 전에 데이터를 먼저 줄여서 받습니다.
| 6 | HASH GROUP BY | | 72 | 288 | 379 | ← 3번에서 GROUP BY 가 일어나기 전 먼저 GROUP BY 가 수행됩니다.
| 7 | PX BLOCK ITERATOR | | 897K | 3589K | 369 |
| 8 | TABLE ACCESS FULL| SALES | 897K | 3589K | 369 |
----------------------------------------------------------------------
슬레이브 단의 선 GROUP BY (Id 6) 로 897K 건이 72 건으로 줄어든 뒤 Table Queue 로 전달되고, 코디네이터 단의 후 GROUP BY (Id 3) 가 최종 집계를 수행하는 두 단계 구조입니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.