3. 병렬 조인
2011.06.28 20:35
03 병렬 조인
병렬 조인 원리 : 병렬 프로세스들이 서로 독립적으로 조인을 수행할 수 있도록 데이터를 분배하는 데에 있다. 분배작업이 완료 되고 나면 프로세스 간에 서로 방해받지 않고(통신 불필요) 각자 할당받은 범위내에서 조인을 완료한다.
1. 파티션 방식 : Parition -Pair 끼리 조인 수행
2. Broadcast 방식 : 한쪽 테이블을 Broadcast하고 나서 조인 수행(-> 파티셔닝 불필요)
1. 파티션 방식 : Parition -Pair 끼리 조인 수행
(1) 둘 다 같은 기준으로 파티셔닝된 경우. -Full Partition Wise 조인
앞서 예시한 병렬 조인 문장을 처리하는 데 있어, 조인에 참여하는 두 테이블이 조인 컬럼(dept_no)에 대해 같은 기준으로 파티셔닝 돼 있다면 병렬 조인은 매우 간단하다.
* 뒤에서 설명하겠지만 다른 병렬 조인은 두 개의 서버집합이 필요한 반면, 여기서는 하나의 서버집합만 필요하다.
* Full Partition Wise 조인은 파티션 기반 Granule 이므로 서버 프로세스 개수는 파티션 개수 이하로 제한 된다.
* 파티션 방식은 어떤 것이든 상관없다. Range이든 리스트이든 해시이든 두테이블이 조인 컬럼에 대해 같은 방식, 같은 기준으로 파티셔닝 돼 있다면 서로 방해받지 않고 Partition Pair 끼리 독립적인 병렬 조인이 가능하기 때문이다.
* 조인 방식도 어떤 것이든 선택 가능하다. NL 조인, 소트 머지 조인, 해시 조인등.
(2)둘 중 하나만 파티셔닝된 경우 - Partial Partition Wise 조인.
둘 중 한 테이블만 조인 컬럼에 대해 파티셔닝된 경우, 다른 한쪽 테이블을 같은 기준으로 동적으로 파티셔닝하고 나서 각 Partiton - Pair를 독립적으로 병렬 조인하는것을 Partial Partition Wise 조인'이라고 한다. 둘 다 파티셔닝되었지만 파티션 기준이 서로 다른 경우도 이 방식으로 조인될 수 있다.
중요한 것은 데이터를 동적으로 파티셔닝하기 위해선 데이터 재분배가 선행되어야 한다는 사실이다. 즉 Inter - operation paralleism을 위해 두개의 서버 집합이 필요하다.
(3) 둘 다 파티셔닝되지 않은 경우 - 동적 파티셔닝.
조인 컬럼에 대해 어느 한 쪽도 파티셔닝되지 않은 상황이라면 오라클은 두 가지 방식 중 하나를 사용한다.
- 양쪽 테이블을 동적으로 파티셔닝하고서 Full Partition Wise 조인.
- 한쪽 테이블을 Broadcast하고 나서 조인.
* 이 방식의 특징은 조인을 본격적으로 수행하기 전 사전 정지 작업단계에서 메모리 자원과 테이블스페이스공간을 많이 사용한다는 데에 있다. 그리고 양쪽 모두파티셔닝해야 하므로 기본적으로 양쪽 테이블 모두에 대한 전체범위처리가 불가피하다.
또한 조인 컬럼의 데이터분포가 균일하지 않을 때는 프로세스 간 일량 차이 때문에 병렬 처리 효과가 크게 반감될 수 있따. 예를 들어, 상품권 업무를 담당하는 사원이 몇몇 사람에게 집중된 상황에서 아래 병렬 쿼리를 이 방식으로 수행한다면 16개 중 일부 프로세스만 열심히 일하고 나머지는 Idle 상태로 대기하는 현상이 발생할 것이다.
물론 이런 특징은 Partition Wise 조인에서도 똑같이 나타날 수 있다. 하지만 그의 컬럼이라면 애당초 파티션 기준 컬럼으로 부적당한 것이므로 병렬 조인의 비효율보다는 파티션 전략의 오류로 보는 것이 타당하다.
2. Broadcast 방식 : 한쪽 테이블을 Broadcast하고 나서 조인 수행(-> 파티셔닝 불필요)
(1) 둘 다 파티셔닝되지 않은 경우 - Broadcast방식
조인컬럼에대해어느 한 쪽도 파티셔닝되지 않은 상황에서 오라클이 선택할 수 있는 두 번째 방식은 Broadcast 방식으로서, 두 테이블 중 작은 쪽을 반대편 서버 집합의 "모든"프로세스에 Broadcast 하고 나서 조인을 수행하는 방식.
* Broadcast는 작은테이블임이 전제되어야하므로 Serial 스캔으로 처리할 때도 많다.따라서 P->P가 아닌 S->P 형태가 오히려 일반적이고 이는 두 테이블 중 한쪽 테이블만 병렬로처리함을 뜻한다.
* Broadcast가 이루어지고 나서의 조인방식은 어떤 것이든 선택 가능하다. NL 조인, 소트 머지 조인, 해시 조인등
* Broadcast되는 작은 쪽 테이블은 전체범위처리가 불가피하지만 큰 테이블은 부분범위 처리가 가능하다.
4가지 병렬조인방식의 특징.
병렬조인방식 |
특징 |
full Partition Wise 조인 | * 두 테이블모두 조인 컬럼에 대해 같은기준으로파티셔닝 * 데이터 재분배 불필요-> 단일 서버 집합만으로 수행 |
Partial Partition Wise 조인 | * 둘 중 한 테이블만 조인 컬럼에 대해 파티셔닝된 경우 * 파티셔닝되지 않은 다른 쪽 테이블을 같은 기준으로 파티셔닝하고 나서 Full Partition Wise 조인 * 동적 파티셔닝을 위한 데이터 재분배 필요 -> 두개의 서버 집합이 작업 수행 |
동적파티셔닝 | * 어느 한쪽도 조인 컬럼에 대해 파티셔닝되지 않은 상황 * 양쪽 테이블이 모두 대용량 * 임시 테이블스페이스를 많이 사용 * 양쪽 테이블 모두 전체범위처리 * 조인 컬럼의 데이터 분포가 균일해야함 |
Broadcast | * 어느 한 쪽도조인 컬럼에 대해 파티셔닝되지 않은 상황 * 둘 중 하나의 테이블이 매우 작을 때 * 동적파티셔닝이 불필요 -> 큰 테이블에대한 부분범위처리가능 |
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
15 | 1. 소트 수행 원리 | balto | 2011.06.11 | 8071 |
14 | 6. Sort Area를 적게 사용하도록 SQL 작성 | 오예스 | 2011.06.14 | 4236 |
13 | 5장. 소트 튜닝 | balto | 2011.06.15 | 4299 |
12 | 3. 데이터 모델 측면에서의 검토 | AskZZang | 2011.06.15 | 2730 |
11 | 4. 소트가 발생하지 않도록 SQL 작성 | AskZZang | 2011.06.15 | 3123 |
10 | 5. 인덱스를 이용한 소트 연산 대체 | AskZZang | 2011.06.15 | 4962 |
9 | 7. Sort Area 크기 조정 | 오예스 | 2011.06.15 | 6016 |
8 | 2. 파티션 Pruning | 휘휘 | 2011.06.19 | 11952 |
7 | 1. 테이블 파티셔닝 | 오라클잭 | 2011.06.20 | 28307 |
6 | 5. 병렬 처리에 관한 기타 상식 [1] | balto | 2011.06.26 | 28192 |
5 | 4. PQ_DISTRIBUTE 힌트 | 휘휘 | 2011.06.26 | 15731 |
» | 3. 병렬 조인 | 오예스 | 2011.06.28 | 4988 |
3 | 2. 병렬 Order By와 Group By | 휘휘 | 2011.06.29 | 10211 |
2 | 진행기록 | 운영자 | 2011.08.22 | 2390 |
1 | 4장._쿼리_변환 | 휘휘 | 2011.09.07 | 2401 |