메뉴 건너뛰기

bysql.net

3. 병렬 조인

2011.06.29 05:35

오예스 조회 수:4969

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 * 어느 한 쪽도조인 컬럼에 대해 파티셔닝되지  않은 상황
* 둘 중 하나의 테이블이 매우 작을 때
* 동적파티셔닝이 불필요 -> 큰 테이블에대한 부분범위처리가능
번호 제목 글쓴이 날짜 조회 수
35 1. 옵티마이저 file 휘휘 2011.04.18 6064
34 3. 옵티마이저의 한계 - P 휘휘 2011.04.18 3699
33 2. 옵티마이저 행동에 영향을 미치는 요소 balto 2011.04.18 6160
32 3. 옵티마이저의 한계 휘휘 2011.04.19 6698
31 4. 통계정보 Ⅰ file 토시리 2011.04.25 16013
30 6. 히스토그램 오예스 2011.04.25 17389
29 5. 카디널리티 오라클잭 2011.04.27 12918
28 7. 비용 file balto 2011.05.02 4997
27 8. 통계정보 Ⅱ AskZZang 2011.05.04 5913
26 1. 쿼리 변환이란? 운영자 2011.05.16 6258
25 3. 뷰 Merging 오라클잭 2011.05.17 6082
24 2. 서브쿼리 Unnesting 토시리 2011.05.18 2079
23 5. 조건절 이행 file balto 2011.05.30 5465
22 4. 조건절 Pushing 오예스 2011.05.31 17482
21 6. 조인 제거 AskZZang 2011.06.01 5440
20 7. OR-Expansion AskZZang 2011.06.01 8327
19 12. 기타 쿼리 변환 휘휘 2011.06.06 3122
18 10. 실체화 뷰 쿼리로 재작성 오라클잭 2011.06.08 9953
17 11. 집합 연산을 조인으로 변환 오라클잭 2011.06.08 4955
16 2. 소트를 발생시키는 오퍼레이션 file balto 2011.06.12 4847