3. 병렬 조인

조회 수 4504 추천 수 0 2013.08.21 12:33:43
오예스 *.182.62.197

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 * 어느 한 쪽도조인 컬럼에 대해 파티셔닝되지  않은 상황
* 둘 중 하나의 테이블이 매우 작을 때
* 동적파티셔닝이 불필요 -> 큰 테이블에대한 부분범위처리가능