681~697
SQL 문이 수행해야 할 작업 범위를 여러개의 작은 단위로 나누어 여러 프로세스 (또는 쓰레드 windows?) 가 동시에 처리하는 것
병렬 작업이 실행될 때 필요한 프로세스를 확보하고 병렬로 처리하도록 사용자가 지시하지 않는 테이블 처리
병렬 서버로 산출물을 통합하는 작업
한 서버집합 같 또는 서버 집합 같 데이터 전송을 위해 연결된 파이프 라인
select /*\+ ordered use_hash(e) full(d) noparallel(d) full(e) parallel(e 2) pq distribute(e broadcast none) \*/ *
from dept d, emp e
where d.deptno = e.deptno
order by e. ename
select /*+ parallel (emp 2) \*/ * from emp
의 경우 TQ1 과 TQ2 가 생산된다고 하면
select * from TQ1
select \* from TQ2
해서 결과값을 추려낸후 병합
이벤트명 | 클래스 | 설명 |
---|---|---|
PX Deq: Execute Reply | idle | QC가 각 병렬 서버에게 작업을 배분하고서 작업이 완료되기를 기다리는상태 |
PX Deq: Execution Msg | idle | 병렬 서버가 자신의 임무를 완수하고서 다른 병렬 서버가 일을 마치기를 기다리는 상태. QC 또는 소비자 병렬 서버에게 데이 터 전송을 완료했을 때 나타남 |
PX Deq: Table Q Normal | other | 메시지 수신 대기. 메시지 큐에 데이터가 쌓이기를 기다리는 상태 |
PX Deq Credit: send blkd | idle | 메시지 송신 대기. QC 또는 소비자 병렬 서버에게 전송할 데이 터가 있는데 블로킹 된 상태. 생산자 프로세스가 메시지 큐를 통해 데이터를 전송하려고 하는 데 어떤 이유에서건 소비자 프로세스가 버떠에서 데이터를 빨리 꺼내가지 않을때 발생 |
PX Deq Credit: need buffer | idle | 데이터를 전송하기 전에 상대펀 병렬 서버 또는 QC로부터 credit 비트를 얻으려고 대기하는 상태. 오라클 측의 설명(메타 링크 문서번호 271767. 1)에 의하면 PX Oeq Credit: send blkd 과 PX Oeq Credit: need buffer 는 거의 같은 대기 이벤트이 고, 내부적인 이유로 전자는 로컬 시스템에서 자주 발샘하고, 후 지는 RAC 시스템에서 자주 발생한다고 함 |
병렬로 처리할때 최소 일의 단위
SQL> select /*\+ parallel(emp ename) * / * from emp order by ename
select decode(a .qcserial#, null, 'PARENT',' 'CHILD') ST_LVL
, a. server_set "SET", a.sid, a . serial#, status, event,wait class
from v$px_session a, v$session b
where a.sid = b.sid
and a.qcsid = 5284
order by a.qcsid, ST_LVL desc, a.server_group, a.server set
insert /\* + append * / into t1
select /*\+ full(t2) parallel(t2 4) \*/ * from t2;
대량인서트
사용자 접근이 낮은 시간에 대량 인서트 작업시.
1. 해당 세션 parrleldml 옵션 enable
SQL> alter session enable parallel DML;
2. insert 대상 테이블 nologing 으로 변경
SQL> alter table t1 nologging
3. 대량 인서트 시작
SQL> insert /\* + append * / into t1
select /*\+ full(t2) parallel(t2 4) \*/ * from t2;
4. 테이블 loging 으로 변경
SQL> alter table t1 loging
5. 해당 세션 parrleldml 옵션 disable
SQL> alter session disable parallel DML;