2019-02-07 07:35:04 | 作者: 曦晨 | 标签: 时刻,句子,部分 | 浏览: 3430
默许状况下并行DML是被制止的。在会话等级,能够运用下面的SQL句子启用或禁用它们。
ALTER SESSION ENABLE PARALLEL DML
ALTER SESSION DISABLE PARALLEL DML
别的,也能够运用下面的SQL句子来强制依照指定的并行度进行并行处理
ALTER SESSION FORCE PARALLEL DML PARALLEL 4
留意:必须在会话等级肯定发动并行DML的状况下,才能够并行处理DML句子,独自运用提示无法发动并行DML句子。
SELECT pdml_status FROM v$session WHERE sid=sys_context(userenv,sid)查询会话等级并行DML状况
除INSERT句子外,并行履行DML句子也需求启用并行查询。实际上,DML句子基本上是由两个操作组成的:首要找到需求
被修正的记载,然后修正这些记载。问题是,假如查找记载的部分没有并行地执
行,那么修正记载的部分就不能被并行履行。
测验记载如下:
TABLE t AS
2 SELECT rownum AS id, rpad(*,100,*) AS pad
3 FROM dual
4 CONNECT BY level = 100000;
表已创立。
已用时刻: 00: 00: 12.64
dbms_stats.gather_table_stats(ownname = user, tabname = t)
PL/SQL 进程已成功完结。
已用时刻: 00: 00: 26.32
初始会话等级并行状况为DISABLED
pdml_status
2 FROM v$session
3 WHERE /* sid = sys_context(userenv,sid) */
4 audsid = sys_context(userenv,sessionid);
PDML_STATUS
DISABLED
已用时刻: 00: 00: 00.54
在会话等级查询并行状况
SESSION DISABLE PARALLEL DML;
会话已更改。
已用时刻: 00: 00: 00.01
pdml_status
2 FROM v$session
3 WHERE /* sid = sys_context(userenv,sid) */
4 audsid = sys_context(userenv,sessionid);
PDML_STATUS
DISABLED
已用时刻: 00: 00: 00.54
SESSION ENABLE PARALLEL DML;
会话已更改。
已用时刻: 00: 00: 00.01
pdml_status
2 FROM v$session
3 WHERE /* sid = sys_context(userenv,sid) */
4 audsid = sys_context(userenv,sessionid);
PDML_STATUS
ENABLED
已用时刻: 00: 00: 00.04
SESSION FORCE PARALLEL DML PARALLEL 4;
会话已更改。
已用时刻: 00: 00: 00.00
pdml_status
2 FROM v$session
3 WHERE /* sid = sys_context(userenv,sid) */
4 audsid = sys_context(userenv,sessionid);
PDML_STATUS
FORCED
已用时刻: 00: 00: 00.01
并行INSERT操作测验
首要禁用并行DML,INSERT句子无法进行并行操作
SESSION DISABLE PARALLEL DML;
会话已更改。
已用时刻: 00: 00: 00.00
PLAN FOR INSERT INTO t SELECT * FROM t;
已解说。
已用时刻: 00: 00: 00.01
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 1601196873
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | INSERT STATEMENT | | 100K| 10M| 350 (2)| 00:00:05 |
| 1 | TABLE ACCESS FULL| T | 100K| 10M| 350 (2)| 00:00:05 |
已挑选8行。
已用时刻: 00: 00: 00.18
;
回退已完结。
翻开并行DML,INSERT句子能够进行并行操作
SESSION FORCE PARALLEL DML PARALLEL 4;
会话已更改。
已用时刻: 00: 00: 00.01
PLAN FOR INSERT INTO t SELECT * FROM t;
已解说。
已用时刻: 00: 00: 00.03
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 3884603837
-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-
| 0 | INSERT STATEMENT | | 100K| 10M| 97 (2)| 00:00:02 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 100K| 10M| 97 (2)| 00:00:02 | Q1,01 | P- S | QC (RAND) |
| 3 | LOAD AS SELECT | T | | | | | Q1,01 | PCWP | |
| 4 | PX RECEIVE | | 100K| 10M| 97 (2)| 00:00:02 | Q1,01 | PCWP | |
| 5 | PX SEND ROUND-ROBIN| :TQ10000 | 100K| 10M| 97 (2)| 00:00:02 | Q1,00 | P- P | RND-ROBIN |
| 6 | PX BLOCK ITERATOR | | 100K| 10M| 97 (2)| 00:00:02 | Q1,00 | PCWC | |
| 7 | TABLE ACCESS FULL| T | 100K| 10M| 97 (2)| 00:00:02 | Q1,00 | PCWP | |
-
已挑选14行。
已用时刻: 00: 00: 00.15
;
禁用并行DML形式,在提示句子下操作状况如下,INSERT句子无法进行并行操作
SESSION DISABLE PARALLEL DML;
会话已更改。
已用时刻: 00: 00: 00.06
PLAN FOR INSERT /*+ parallel(t 4) */ INTO t SELECT /*+ parallel(t 4) */ * FROM t;
已解说。
已用时刻: 00: 00: 00.14
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 3050126167
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
| 0 | INSERT STATEMENT | | 100K| 10M| 97 (2)| 00:00:02 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM)| :TQ10000 | 100K| 10M| 97 (2)| 00:00:02 | Q1,00 | P- S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 100K| 10M| 97 (2)| 00:00:02 | Q1,00 | PCWC | |
| 4 | TABLE ACCESS FULL| T | 100K| 10M| 97 (2)| 00:00:02 | Q1,00 | PCWP | |
已挑选11行。
已用时刻: 00: 00: 00.10
;
回退已完结。
已用时刻: 00: 00: 00.04
启用并行DML形式,在提示句子下操作状况如下,INSERT句子能够进行并行操作
SESSION FORCE PARALLEL DML PARALLEL 4;
会话已更改。
已用时刻: 00: 00: 00.00
PLAN FOR INSERT /*+ parallel(t 4) */ INTO t SELECT /*+ parallel(t 4) */ * FROM t;
已解说。
已用时刻: 00: 00: 00.21
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 3884603837
-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-
| 0 | INSERT STATEMENT | | 100K| 10M| 97 (2)| 00:00:02 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 100K| 10M| 97 (2)| 00:00:02 | Q1,01 | P- S | QC (RAND) |
| 3 | LOAD AS SELECT | T | | | | | Q1,01 | PCWP | |
| 4 | PX RECEIVE | | 100K| 10M| 97 (2)| 00:00:02 | Q1,01 | PCWP | |
| 5 | PX SEND ROUND-ROBIN| :TQ10000 | 100K| 10M| 97 (2)| 00:00:02 | Q1,00 | P- P | RND-ROBIN |
| 6 | PX BLOCK ITERATOR | | 100K| 10M| 97 (2)| 00:00:02 | Q1,00 | PCWC | |
| 7 | TABLE ACCESS FULL| T | 100K| 10M| 97 (2)| 00:00:02 | Q1,00 | PCWP | |
-
已挑选14行。
已用时刻: 00: 00: 00.23
;
并行UPDATE操作
禁用DML并行形式,UPDATE 句子无法进行并行操作
SESSION DISABLE PARALLEL DML;
会话已更改。
已用时刻: 00: 00: 00.03
PLAN FOR UPDATE t SET id = id + 1;
已解说。
已用时刻: 00: 00: 00.01
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 931696821
-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-
| 0 | UPDATE STATEMENT | | 100K| 488K| 350 (2)| 00:00:05 |
| 1 | UPDATE | T | | | | |
| 2 | TABLE ACCESS FULL| T | 100K| 488K| 350 (2)| 00:00:05 |
-
已挑选9行。
已用时刻: 00: 00: 00.06
;
回退已完结。
翻开DML并行形式,UPDATE 句子能够进行并行操作
SESSION FORCE PARALLEL DML PARALLEL 4;
会话已更改。
已用时刻: 00: 00: 00.00
PLAN FOR UPDATE t SET id = id + 1;
已解说。
已用时刻: 00: 00: 00.07
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 2037160838
-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-
| 0 | UPDATE STATEMENT | | 100K| 488K| 97 (2)| 00:00:02 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 100K| 488K| 97 (2)| 00:00:02 | Q1,00 | P- S | QC (RAND) |
| 3 | UPDATE | T | | | | | Q1,00 | PCWP | |
| 4 | PX BLOCK ITERATOR | | 100K| 488K| 97 (2)| 00:00:02 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| T | 100K| 488K| 97 (2)| 00:00:02 | Q1,00 | PCWP | |
-
已挑选12行。
已用时刻: 00: 00: 00.06
;
回退已完结。
已用时刻: 00: 00: 00.06
当并行查询和并行DML句子都禁用时,没有操作被并行化
SESSION DISABLE PARALLEL QUERY;
会话已更改。
已用时刻: 00: 00: 00.03
SESSION DISABLE PARALLEL DML;
会话已更改。
已用时刻: 00: 00: 00.00
TABLE t PARALLEL 2;
表已更改。
已用时刻: 00: 00: 00.45
PLAN FOR UPDATE t SET id = id + 1;
已解说。
已用时刻: 00: 00: 00.10
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 931696821
-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-
| 0 | UPDATE STATEMENT | | 100K| 488K| 350 (2)| 00:00:05 |
| 1 | UPDATE | T | | | | |
| 2 | TABLE ACCESS FULL| T | 100K| 488K| 350 (2)| 00:00:05 |
-
已挑选9行。
已用时刻: 00: 00: 00.04
;
回退已完结。
已用时刻: 00: 00: 00.06
当只要并行查询被启用时,DML句子的更新部分没有并行履行
SESSION ENABLE PARALLEL QUERY;
会话已更改。
已用时刻: 00: 00: 00.03
SESSION DISABLE PARALLEL DML;
会话已更改。
已用时刻: 00: 00: 00.01
TABLE t PARALLEL 2;
表已更改。
已用时刻: 00: 00: 00.21
PLAN FOR UPDATE t SET id = id + 1;
已解说。
已用时刻: 00: 00: 00.03
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 1378397380
-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-
| 0 | UPDATE STATEMENT | | 100K| 488K| 193 (1)| 00:00:03 | | | |
| 1 | UPDATE | T | | | | | | | |
| 2 | PX COORDINATOR | | | | | | | | |
| 3 | PX SEND QC (RANDOM)| :TQ10000 | 100K| 488K| 193 (1)| 00:00:03 | Q1,00 | P- S | QC (RAND) |
| 4 | PX BLOCK ITERATOR | | 100K| 488K| 193 (1)| 00:00:03 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| T | 100K| 488K| 193 (1)| 00:00:03 | Q1,00 | PCWP | |
-
已挑选12行。
已用时刻: 00: 00: 00.06
;
回退已完结。
已用时刻: 00: 00: 00.25
当并行查询和并行DML句子都启用时,更新部分也能够并行地履行
SESSION ENABLE PARALLEL QUERY;
会话已更改。
已用时刻: 00: 00: 00.00
SESSION ENABLE PARALLEL DML;
会话已更改。
已用时刻: 00: 00: 00.03
TABLE t PARALLEL 2;
表已更改。
已用时刻: 00: 00: 00.04
PLAN FOR UPDATE t SET id = id + 1;
已解说。
已用时刻: 00: 00: 00.03
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 2037160838
-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-
| 0 | UPDATE STATEMENT | | 100K| 488K| 193 (1)| 00:00:03 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 100K| 488K| 193 (1)| 00:00:03 | Q1,00 | P- S | QC (RAND) |
| 3 | UPDATE | T | | | | | Q1,00 | PCWP | |
| 4 | PX BLOCK ITERATOR | | 100K| 488K| 193 (1)| 00:00:03 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| T | 100K| 488K| 193 (1)| 00:00:03 | Q1,00 | PCWP | |
-
已挑选12行。
已用时刻: 00: 00: 00.06
;
回退已完结。
已用时刻: 00: 00: 00.01
并行删去测验
禁用并行DML,则删去部分无法并行操作
SESSION DISABLE PARALLEL DML;
会话已更改。
已用时刻: 00: 00: 00.01
PLAN FOR DELETE t;
已解说。
已用时刻: 00: 00: 00.03
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 276543898
-
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-
| 0 | DELETE STATEMENT | | 100K| 193 (1)| 00:00:03 | | | |
| 1 | DELETE | T | | | | | | |
| 2 | PX COORDINATOR | | | | | | | |
| 3 | PX SEND QC (RANDOM)| :TQ10000 | 100K| 193 (1)| 00:00:03 | Q1,00 | P- S | QC (RAND) |
| 4 | PX BLOCK ITERATOR | | 100K| 193 (1)| 00:00:03 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| T | 100K| 193 (1)| 00:00:03 | Q1,00 | PCWP | |
-
已挑选12行。
已用时刻: 00: 00: 00.11
;
回退已完结。
已用时刻: 00: 00: 00.03
启用并行DML,则删去部分能够履行并行操作
SESSION FORCE PARALLEL DML PARALLEL 4;
会话已更改。
已用时刻: 00: 00: 00.01
PLAN FOR DELETE t;
已解说。
已用时刻: 00: 00: 00.03
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 1346169614
-
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-
| 0 | DELETE STATEMENT | | 100K| 97 (2)| 00:00:02 | | | |
| 1 | PX COORDINATOR | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 100K| 97 (2)| 00:00:02 | Q1,00 | P- S | QC (RAND) |
| 3 | DELETE | T | | | | Q1,00 | PCWP | |
| 4 | PX BLOCK ITERATOR | | 100K| 97 (2)| 00:00:02 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| T | 100K| 97 (2)| 00:00:02 | Q1,00 | PCWP | |
-
已挑选12行。
已用时刻: 00: 00: 00.06
;
回退已完结。
已用时刻: 00: 00: 00.20
禁用并行DML,即便加parallel注释删去部分也无法并行操作
SESSION DISABLE PARALLEL DML;
会话已更改。
已用时刻: 00: 00: 00.00
PLAN FOR DELETE /*+ parallel(t 4) */ t;
已解说。
已用时刻: 00: 00: 00.03
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 276543898
-
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-
| 0 | DELETE STATEMENT | | 100K| 97 (2)| 00:00:02 | | | |
| 1 | DELETE | T | | | | | | |
| 2 | PX COORDINATOR | | | | | | | |
| 3 | PX SEND QC (RANDOM)| :TQ10000 | 100K| 97 (2)| 00:00:02 | Q1,00 | P- S | QC (RAND) |
| 4 | PX BLOCK ITERATOR | | 100K| 97 (2)| 00:00:02 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| T | 100K| 97 (2)| 00:00:02 | Q1,00 | PCWP | |
-
已挑选12行。
已用时刻: 00: 00: 00.11
;
回退已完结。
已用时刻: 00: 00: 00.03
启用并行DML,加parallel注释删去部分能够并行操作
SESSION ENABLE PARALLEL DML;
会话已更改。
已用时刻: 00: 00: 00.01
PLAN FOR DELETE /*+ parallel(t 4) */ t;
已解说。
已用时刻: 00: 00: 00.07
* FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
Plan hash value: 1346169614
-
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
-
| 0 | DELETE STATEMENT | | 100K| 97 (2)| 00:00:02 | | | |
| 1 | PX COORDINATOR | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 100K| 97 (2)| 00:00:02 | Q1,00 | P- S | QC (RAND) |
| 3 | DELETE | T | | | | Q1,00 | PCWP | |
| 4 | PX BLOCK ITERATOR | | 100K| 97 (2)| 00:00:02 | Q1,00 | PCWC | |
| 5 | TABLE ACCESS FULL| T | 100K| 97 (2)| 00:00:02 | Q1,00 | PCWP | |
-
已挑选12行。
已用时刻: 00: 00: 00.06