본문 바로가기

프로그래밍/oracle

oracle - [Hint]병렬처리(PARALLEL)

반응형

[Hint]병렬처리(PARALLEL)


Parallel 힌트에서 지정한 병렬도로 쿼리를 처리할 수 있게 해줍니다.

query에 포함된 table의 degree를 설정할 수 있는데 테이블이나 인덱스 생성시 degree는 기본이 1이며 다음과 같이 확인 가능 합니다. 참고로 degree는 병렬도를 이야기 하는데 해당 SQL을 몇 개의 작업으로 분할하여 동시에 처리할 것인가를 나타내는 값입니다. 하나의 일을 동시에 여러 프로세스가 나누어서 처리하므로 빨리 할 수 있겠지만 무작정 성능이 좋은 것은 아닙니다.


SQL>SELECT DEGREE FROM USER_TABLES

   2 WHERE TABLE_NAME = ‘EMP’


DEGREE

------

1


만약 다음과 같이 테이블을 만든다면 degree 는 2가 되겠죠…


Create table emp (

Empno number(7) not null primary key,

Ename varchar2(20),

)

Parallel(degree 2);


SQL>SELECT DEGREE FROM USER_TABLES

   2 WHERE TABLE_NAME = ‘EMP’


DEGREE

------

2


이미 생성된 테이블에 대해서는 다음과 같이 병렬도를 변경 가능 합니다.


alter table emp parallel (degree 4);

alter table emp parallel (degree default);



다음과 같이 뷰에서도 사용 가능 합니다.


create or replace view v_emp as

select /*+ parallel (emp, 4) parallel (dept, 6) */

from emp, dept

where emp.id = dept.x_id;



parellel 힌트를 사용하면 기본적으로 설정된 병렬도를 무시하고 해당 SQL문에 대해 지정가능 하다는 이야기입니다.


SQL>select /*+ parallel(emp 2) from emp;


일반적인 실행계획 구문이외 다음과 같은 힌트가 보이면 해당 쿼리가 병렬 처리되고 있다고 생각하시면 되구요…


/*+ Q1207000 NO_EXPAND ROWID(A1) */ 



다음과 같이 병렬도를 명시적으로 지정하지 않으면 “CPU개수 * PARELLEL_THREADS_PER_CPU값”을 기본적으로 취합니다.


Select /*+ parallel(emp) */ from emp;

 

 

 

 


반응형