
특정 유져가 자기 혼자 병렬도를 아주 크게 주고 CPU를 다 사용해버리면,
그 유져의 작업이 빨라질 수 있으나 다른 유져들이 작업이 안됨
select /+ parallel(emp,4) / ename, sal
from emp;
- 하나의 프로세서가 emp 테이블을 full scan 하는게 아니라,
4개의 프로세서가 나눠서 emp 테이블을 full scan 하니까 속도가 빨라짐- 병렬작업이 지원되려면 오라클을 반드시 enterprise edition으로 설치해야함
- 8코어 ~ 24코어, 오라클 1코어 5억씩임. 24코어를 쓰면 120억을 오라클 설치
비용으로 내야하고 매년 구입 가격의 3%를 유지보수비로 내야함
1. scott 유져에서 병렬 쿼리를 실행하고 병렬 프로세서들이 잘 떠있는지 확인하시오 !
SCOTT> select /*+ parallel(s1,2) parallel(s2,2) */ count(*)
from sh.sales s1, sh.sales s2;
2. sys 유져에서 다음과 같이 병렬 프로세서들이 떠있는지 확인하시오 !
col program for a25
col process for a10
select process, program
from v$session
where program like '%(P0%';
sys> save pa.sql
3. scott 유져가 병렬도를 1 이상으로 지정하지 못하게 하시오 !
SYSTEM> exec dbms_resource_manager.create_pending_area();
SYSTEM> begin
dbms_resource_manager.update_plan_directive(
plan=>'DAYTIME',
group_or_subplan=>'ONLINE_USERS',
new_parallel_degree_limit_p1 =>1);
end;
/
SYSTEM> exec dbms_resource_manager.submit_pending_area();
SQL> select plan, group_or_subplan, cpu_p1, cpu_p2,
parallel_degree_limit_p1 dop, max_idle_blocker_time block_t,
max_idle_time, undo_pool
from dba_rsrc_plan_directives
where plan='DAYTIME'
order by 1,2;
SCOTT> select /*+ parallel(s1,6) parallel(s2,6) */ count(*)
from sh.sales s1, sh.sales s2;
system>@pa.sql

ㄴ 선택된 레코드가 없다고 나오면 테스트가 잘된 것임
SYSTEM> exec dbms_resource_manager.create_pending_area();
SYSTEM> begin
dbms_resource_manager.update_plan_directive(
plan=>'DAYTIME',
group_or_subplan=>'ONLINE_USERS',
new_parallel_degree_limit_p1 =>-1);
end;
/
SYSTEM> exec dbms_resource_manager.submit_pending_area();
