문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
study:oracle:datadb:4week_2:chap5 [2010/05/27 10:20] zummaz |
study:oracle:datadb:4week_2:chap5 [2010/05/27 13:01] (현재) zummaz |
||
---|---|---|---|
줄 4: | 줄 4: | ||
*본 유형의 HINT들은 시스템 자원을 최대한 사용하더라도 결과를 얻는 절대 시간을 줄이겠다는 것이 목적이다.즉 병렬처리는 **시스템에 부하를 주더라도 수행시간을 당기는 것이 더 필요**할 때 적용하는 처리방법이다. 그러므로 가능하다면 기본값(Default value)을 사용하지 말고, SQL단위에서 힌트를 사용하여 적용하는것이 바람직하다. | *본 유형의 HINT들은 시스템 자원을 최대한 사용하더라도 결과를 얻는 절대 시간을 줄이겠다는 것이 목적이다.즉 병렬처리는 **시스템에 부하를 주더라도 수행시간을 당기는 것이 더 필요**할 때 적용하는 처리방법이다. 그러므로 가능하다면 기본값(Default value)을 사용하지 말고, SQL단위에서 힌트를 사용하여 적용하는것이 바람직하다. | ||
*병렬처리 힌트는 병렬처리에서 나타나는 병렬프로세스들의 개수를 지정하거나 내부처리방법에 대한 우리의 요구를 전달하기 위해 사용한다. 특히 **병렬 프로세스의 개수는 수행시간 및 시스템의 부하에 직접적인 영향**을 미치므로 매우 중요하다. | *병렬처리 힌트는 병렬처리에서 나타나는 병렬프로세스들의 개수를 지정하거나 내부처리방법에 대한 우리의 요구를 전달하기 위해 사용한다. 특히 **병렬 프로세스의 개수는 수행시간 및 시스템의 부하에 직접적인 영향**을 미치므로 매우 중요하다. | ||
+ | |||
===PARALLEL=== | ===PARALLEL=== | ||
줄 19: | 줄 20: | ||
* DELETE, INSERT, UPDATE, MERGE등의 DML문장을 병렬로 수행하기 위해서는 반드시 세션을 **' | * DELETE, INSERT, UPDATE, MERGE등의 DML문장을 병렬로 수행하기 위해서는 반드시 세션을 **' | ||
- | * *참고 | + | |
- | * 한 번 지정한 병렬도는 내부적으로 GROUP BY나 정렬처리 등의 단위작업에도 재차 적용될수 있다. 만약 **__병렬처리에 어떤 제한 요소__**가 발생하게 되면 이 힌트는 무시된다. | + | - ALTER SESSION ENABLE | DISABLE [병렬 DML_statement] \\ : Enable되어 있는 상태에서의 병렬 DML의 실행 일지라도 Parallel Hint가 DML 내에 사용되지 않은경우 병렬처리 안됨 |
+ | - ALTER SESSION FORCE [병렬 DML_statement] PARALLEL n \\ : 모든 DML 실행시 Parallel 힌트 사용여부나 PARALLEL 구문의 사용 여부에 개의치 않고 무조건 병렬처리됨 | ||
+ | * 한 번 지정한 병렬도는 내부적으로 GROUP BY나 정렬처리 등의 단위작업에도 재차 적용될수 있다. | ||
+ | * 만약 **__병렬처리에 어떤 제한 요소__**가 발생하게 되면 이 힌트는 무시된다. | ||
+ | * 참고사항 : 보통 많은 책들에서 Update, Delete 시에 Partition TABLE이 아닌경우 PARALLEL 수행이 안된다고 하는데 실레로 10g에서 | ||
줄 40: | 줄 46: | ||
예) SELECT /*+ NOPARALLEL(m) */ member_name | 예) SELECT /*+ NOPARALLEL(m) */ member_name | ||
FROM member m; | FROM member m; | ||
+ | |||
===PQ_DISTRIBUTE=== | ===PQ_DISTRIBUTE=== | ||
- | 병렬 조인의 속도를 향상시키기 위해 슬레이브 프로세스 | + | *병렬 조인의 속도를 향상시키기 위해 슬레이브 프로세스 생산자(Producer)와 소비자(Consumer)프로세스 사이에서 조인할 테이블의 로우를 서로 주고 받는 할당작업(Distrubution)을 하는 방법을 정의 하는 힌트이다. |
+ | *이러한 할당 방법을 정의함으로써 병렬 조인의 성능 향상을 유도할 수 있다. | ||
- | 표현 방식: /*+ PQ_DISTRIBUTE(table, | + | |
- | - outer_distribution: | + | *outer_distribution: |
- | - inner_distribution: | + | *inner_distribution: |
- | -할당방법: | + | |
+ | | ||
* HASH: 조인 키 컬럼에 대해 해쉬 함수를 수행한 결과값을 이용하여 소비자 프로세스에 로우들을 할당 | * HASH: 조인 키 컬럼에 대해 해쉬 함수를 수행한 결과값을 이용하여 소비자 프로세스에 로우들을 할당 | ||
* BROADCAST: 외측 테이블에 전체 로우를 모든 Consumer 프로세스로 보냄 | * BROADCAST: 외측 테이블에 전체 로우를 모든 Consumer 프로세스로 보냄 | ||
- | * PARTITON: 상대편 조인 대사 테이블이 조인 키 컬럼으로 파티션되어 있는 경우 파티션 키 값을 이용하여 로우들을 Consumer프로세스에 할당 | + | * PARTITON: 상대편 조인 대상 테이블이 조인 키 컬럼으로 파티션되어 있는 경우 파티션 키 값을 |
+ | | ||
* NONE: 조인 대상 로우들을 랜덤하게 파티셔닝함 | * NONE: 조인 대상 로우들을 랜덤하게 파티셔닝함 | ||
줄 58: | 줄 68: | ||
FROM TAB1 a, TAB2 b | FROM TAB1 a, TAB2 b | ||
WHERE a.col1 = b.col2; | WHERE a.col1 = b.col2; | ||
+ | |||
+ | * 참고: | ||
===PARALLEL_INDEX=== | ===PARALLEL_INDEX=== | ||
파티션 인덱스(Partitioned Index)에 대한 인덱스 범위 스캔을 병렬로 수행하기 위한 병렬도를 지정하는 힌트이다. | 파티션 인덱스(Partitioned Index)에 대한 인덱스 범위 스캔을 병렬로 수행하기 위한 병렬도를 지정하는 힌트이다. |