IT기술/Oracle

성능 고도화 2 - 07 병렬 처리

dobbby 2014. 1. 23. 15:04
반응형

01 기본개념

SQL 문이 수행해야 할 작업 범위를 여러개의 작은 단위로 나누어 여러 프로세스가 동시에 처리하는 것

 

(1) Query Coordinator 와 병렬 프로세스

Query Coordinator 는 병렬 SQL 문을 발행한 세션을 말하고,

병렬 서버 프로세스는 실제 작업을 수행하는 개별 세션들을 말한다.

 

(2) Infra-Operation Parallelism 과 Inter-Operation Parallelism

 

(3) 테이블 큐

* 생산자 / 소비자 모델

 

* 병렬 실행계획에서 생산자와 소비자 식별

 

(4) IN-OUT 오퍼레이션

S → P: PARALLEL_FROM_SERIAL

P → S: PARALLEL_TO_SERIAL

P → P: PARALLEL_TO_PARALLEL

PCWP: PARALLEL_COMBINED_WITH_PARENT

PCWC: PARALLEL_COMBINED_WITH_CHILD

 

(5) 데이터 재분배

RANGE: order by 또는 sort group by 를 병렬로 처리할 때 사용

HASH: 조인이나 hash group by 를 병렬로 처리할 때 사용

BROADCAST: QC 또는 첫 번째 서버 집합에 속한 프로세스들이 각각 읽은 데이터를 두 번째 서버 집합에 속한 "모든" 병렬 프로세스에게 전송하는 방식

KEY: 특정 컬럼을 기준으로 테이블 또는 인덱스를 파티셔닝할 대 사용하는 분배 방식으로서, 실행계획에는 'PARTITION (KEY)' 로 표시된다.

ROUND-ROBIN: 파티션 키, 정렬 키, 해시 함수 등에 의존하지 않고 반대편 병렬 서버에 무작위로 데이터를 분배할 때 사용된다.

 

(6) Granule

데이터를 병렬로 처리할 때 일의 최소단위, 병렬 서버는 한번에 하나의 Granule 씩만 처리한다.

* 블록기반 Granule (=블록 범위 Granule)

* 파티션 기반 Granule (=파티션 Granule)

- Partition_Wise 조인 시

- 파티션 인덱스를 병렬로 스캔할 때

- 파티션 인덱스를 병렬로 갱신할 때

- 9iR1 이전에서의 병렬 DML

- 파티션 테이블 또는 파티션 인덱스를 병렬로 생성할 때

 

(7) 병렬 처리 과정에서 발생하는 대기 이벤트

* 대기 이벤트 모니터링

* 대기 이베트 해소

 

 

 

 

 

02 병렬 Order by 와 Group by

(1) 병렬 Order by

(2) 병렬 Group by

* Group By 가 두 번 나타날 때의 처리과정

 

 

 

 

 

03 병렬조인

병렬 조인 메커니즘을 이해하는 핵심 원리는 병렬 프로세스들이 서로 독립적으로 조인을 수행할 수 있도록 데이터를 분배하는데 있다.

1. 파티션 방식: Partition-Pair 끼리 조인 수행

2. Broadcast 방식: 한쪽 테이블을 Broadcast 하고 나서 조인 수행

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

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

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

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

 

 

 

 

 

04 PQ_DISTRIBUTE 힌트

(1) pq_distribute 힌트의 용도

(2) 구문 이해하기

(3) 분배방식 지정

 

 

 

 

 

05 병렬 처리에 관한 기타 상식

(1) Direct Path Read

오라클은 병렬방식으로 Full Scan 할 때는 버퍼 캐시를 거치지 않고 곧바로 PGA 영역으로 읽어들이는 Direct Path Read 방식을 사용한다.

 

(2) 병렬 DML

 

(3) 병렬 인덱스 스캔

(4) 병렬 NL 조인

* 병렬 인덱스 스캔으로 드라이빙 하는 경우

* 병렬 NL 조인의 효용성

(5) 병렬 쿼리와 스칼라 서브쿼리

(6) 병렬 쿼리와 사용자 정의 함수

* parallel_enable 키워드 역할

(7) 병렬 쿼리와 ROWNUM

SQL에 rownum 을 포함하면 쿼리문을 병렬로 실행하는 데에 제약을 받게 되므로 주의해야 한다.

(8) 병렬처리시 주의사항

병렬처리 기법을 사용하는 것이 좋을 때

* 동시사용자 수가 적은 애플리케이션 환경에서 직렬로 처리할 때보다 성능 개선 효과가 확실할 때

* OLTP성 시스템 환경이라도 작업을 빨리 완료함으로써 직렬로 처리할 때보다 오히려 전체적인 시스템 리소스 사용률을 감소시킬 수 있을 때

 

 

 

반응형