병렬 DML |
---|
세션1 | 세션2 |
---|---|
{code:sql | borderStyle=solid} BIG_TABLE@THREE >select sid from v$mystat where rownum = 1; |
SID
1 row selected.
BIG_TABLE@THREE >alter session enable parallel dml;
Session altered.
BIG_TABLE@THREE >update big_table set status = 'done';
| {code:sql|borderStyle=solid}
SYS@THREE >select a.sid, a.program, b.start_time, b.used_ublk, b.xidusn||'.'||b.xidslot||'.'||b.xidsqn trans_id
2 from v$session a, v$transaction b
3 where a.taddr = b.addr
4 and a.sid in ( select sid from v$px_session where qcsid = 22)
5 order by sid
6 /
SID PROGRAM START_TIME USED_UBLK TRANS_ID
---------- ------------------------------------------------ -------------------- ---------- -------------------
22 sqlplus@primarydb (TNS V1-V3) 12/06/12 15:18:30 1 10.0.5095
23 oracle@primarydb (P002) 12/06/12 15:18:31 1 2.15.4603
24 oracle@primarydb (P004) 12/06/12 15:18:31 11572 7.30.4049
29 oracle@primarydb (P006) 12/06/12 15:18:31 10258 1.22.3711
33 oracle@primarydb (P000) 12/06/12 15:18:31 1 3.7.5080
770 oracle@primarydb (P007) 12/06/12 15:18:31 10663 9.24.5123
782 oracle@primarydb (P005) 12/06/12 15:18:31 10702 8.17.4558
787 oracle@primarydb (P001) 12/06/12 15:18:31 1 6.7.5396
792 oracle@primarydb (P003) 12/06/12 15:18:31 1 4.1.4767
9 rows selected.
|
실행계획 | |
---|---|
{code:sql | borderStyle=solid} |
BIG_TABLE@THREE >explain plan for
2 update big_table set status = 'done';
Explained.
BIG_TABLE@THREE >select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time | TQ | IN-OUT | PQ Distrib |
0 | UPDATE STATEMENT | 17M | 98M | 18111 (1) | 00:03:38 | ||||
1 | PX COORDINATOR | ||||||||
2 | PX SEND QC (RANDOM) | :TQ10001 | 17M | 98M | 18111 (1) | 00:03:38 | Q1,01 | P->S | QC (RAND) |
3 | INDEX MAINTENANCE | BIG_TABLE | Q1,01 | PCWP | |||||
4 | PX RECEIVE | 17M | 98M | 18111 (1) | 00:03:38 | Q1,01 | PCWP | ||
5 | PX SEND RANGE | :TQ10000 | 17M | 98M | 18111 (1) | 00:03:38 | Q1,00 | P->P | RANGE |
6 | UPDATE | BIG_TABLE | Q1,00 | PCWP | |||||
7 | PX BLOCK ITERATOR | 17M | 98M | 18111 (1) | 00:03:38 | Q1,00 | PCWC | ||
8 | TABLE ACCESS FULL | BIG_TABLE | 17M | 98M | 18111 (1) | 00:03:38 | Q1,00 | PCWP |
15 rows selected.
|
=> big_table에 인덱스가 있어, 테이블 update하는 단계와 인덱스 엔트리를 update하는 총 9개의 프로세스 작동
|| PDML 제약 ||
|{code:sql|borderStyle=solid}
1. 트리거기 작동하지 않는다
2. 명시적인 참조 무결성 제약을 지킬 수 없다
3. 커밋 또는 롤백할 때까지 액세스할 수 없다.
4. 트리거 기반인 advanced replication은 사용할 수 없다.
5. 비트맵 인덱스, LOB컬럼이 있는 파티션 테이블은, 하나의 파티션에 하나의 병렬 실행 서버만이 작동한다.
6. 분산 트랜잭션을 사용할 수 없다.
7. 클러스터 테이블은 사용할 수 없다.
|