03 병렬 조인

  • 병렬 처리: SQL문이 수행해야 할 작업 범위를 여러 개의 작은 단위로 나누어 여러 프로세스(또는 쓰리드)가 동시에 처리하는 것

(1) 둘 다 같은 기준으로 파티셔닝된 경우 - Full Partition Wise 조인

  • PX PARTITION RANGE ALL, PARTITION RANGE ITERATOR
  • 하나의 서버집합만 필요
  • Full Partition Wise 조인은 파티션 기반 Granule이므로 서버 프로세스 개수는 파티션 개수 이하로 제한됨
  • 파티션 방식(Method)은 어떤 것이든 상관없음. Range이든 리스트이든 해시든 두 테이블이 조인 컬럼에 대해 같은 방식, 같은 기준으로 파티셔닝 돼 있다면 서로 방해받지 않고 Partition Pair끼리 독립적인 병렬 조인이 가능하기 때문
  • 조인 방식도 어떤 것이든 선택 가능함.

(2) 둘 중 하나만 파티셔닝 된 경우 - Partial Partition Wise 조인

  • 둘 중 한 테이블만 조인 컬럼에 대해 파티셔닝된 경우, 다른 한쪽 테이블을 같은 기준으로 동적으로 파티셔닝하고 나서 각 Partition-Pair를 독립적으로 병렬 조인하는 것
  • 둘 다 파티셔닝되어있지만 파티션 기준이 서로 다른 경우

  • 첫 번째 서버 집합이 테이블을 읽어 두 번째 서버 집합에 데이터를 재분배하는 것이 선행
  • PARTITION (KEY), PART (KEY)

(3) 둘 다 파티셔닝 되지 않은 경우 - 동적 파티셔닝

  • 첫 서버 집합이 outer 테이블 읽어 두 번째 서버 집합에 분배
  • 첫 서버 집합이 inner 테이블 읽어 두 번째 서버 집합에 분배
  • 두 번째 서버 집합이 각 프로세스 내부에서 조인
  • 최종 결과 QC 에 전송
  • 조인을 본격적으로 수행하기 전 사전 정지 작업 단계에서 메모리 자원과 Temp 테이블스페이스 공간을 많이 사용
  • 양쪽 모두 파티셔닝해야 하므로 기본적으로 양쪽 테이블 모두에 대한 전체범위처리가 불가피
  • 조인 컬럼의 데이터 분포가 균일하지 않을 때에는 프로세스 간 일량 차이 때문에 병렬 처리 효과가 반감될 수 있음
  • 대용량이 두 테이블에서 조인 컬럼의 데이터 분포가 균일할 때 사용

(4) 둘 다 파티셔닝되지 않은 경우 - Broadcast 방식

  • 첫 서버 집합이 작은 테이블 전체를 두 번째 집합의 모든 프로세스에 전송
  • 첫 서버 집합이 큰 테이블을 두 번째 집합의 각 프로세스에 동적 파티셔닝 해 전송
  • 두 번째 서버 집합이 각 프로세스 내부에서 조인
  • 최종 결과 QC 에 전송
  • broadcasat 되는 테이블은 비교적 작아서 Serial 하게 읽는것이 일반적
  • 조인 방식에 무관하게 동작 가능
  • 작은 테이블은 전체범위 필요, 큰 테이블은 부분범위 가능