Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 11g 并行DML

Oracle 11g 并行DML(PDML)并行DML应用在决策支撑系统(decision support system DSS)环境时,对于访问大对象时,可扩展性和性能有灰常显著的效果。不能把PDML当成提高OLTP应用速度的一个特性。PDML在大型数据仓库中很有用,它利于大量的数据批量更新。开启PDMLPDML有别于并行查询,除非显示的请求PDML ,否则不能执行PDML。SQL> alter session enable parallel dml;Session altered.这个表属性可能是并行的,但是与并行查询不同,这对于PDML还不够,必须显示的在会话中启动PDML.PDML 采用的是一种伪分布式的实现,存在一些限制1、PDML期间不支持触发器2、PDML期间,不支持某些方式声明的引用完整性。因为表中的每个部分会在单独的会话中作为单独的事务进行处理。PDML操作不支持自引用完整性,那样可能会出现死锁3、提交或回滚之前,不能访问用PDML修改的表。4、不支持延迟约束5、如果表示分区的,PDML只可能有位图索引或LOB列的表上执行。而且并行度取决于分区数。无法在子分区内再并行操作,因为每一个分区只有一个并行执行服务器来处理6、执行PDML时,不支持分布式事务7、PDML不支持聚簇表测试:SQL> alter session disable parallel dml;
SQL> explain plan for update /*+ PARALLEL(4) */ test_b set object_name="AAAA";SQL> select * from table(dbms_xplan.display);
Plan hash value: 725367477
---------------------------------------------------------------------------------------------------------------
| Id  | Operation           | Name   | Rows  | Bytes | Cost (%CPU)| Time   |    TQ  |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT      |          | 75339 |  1839K|    81 (0)| 00:00:01 |        |      |            |
| 1 |  UPDATE             | TEST_B |     |     |            |          |        |      |            |
| 2 | PX COORDINATOR      |          |     |     |            |          |        |      |            |
| 3 |    PX SEND QC (RANDOM)| :TQ10000 | 75339 |  1839K|    81 (0)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
| 4 |   PX BLOCK ITERATOR |          | 75339 |  1839K|    81 (0)| 00:00:01 |  Q1,00 | PCWC |            |
| 5 |      TABLE ACCESS FULL| TEST_B | 75339 |  1839K|    81 (0)| 00:00:01 |  Q1,00 | PCWP |            |
-----------------------------------------------------------------------------------------------------------------------------------------发现并没有真正的实现并行.开启PDMLSQL> alter session enable parallel dml;Session altered.SQL> explain plan for update /*+ parallel(4) */ test_b set object_name="BBBBB";Explained.SQL> select * from table(dbms_xplan.display);Plan hash value: 2467161980------------------------------------------------------------------------------------------------------------------
| Id  | Operation                | Name   | Rows  | Bytes | Cost (%CPU)| Time   |    TQ  |IN-OUT| PQ Distrib |
------------------------------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT       |          | 75339 |  1839K|    81 (0)| 00:00:01 |        |      |            |
| 1 |  PX COORDINATOR          |          |     |     |            |          |        |      |            |
| 2 | PX SEND QC (RANDOM)    | :TQ10001 | 75339 |  1839K|    81 (0)| 00:00:01 |  Q1,01 | P->S | QC (RAND)  |
| 3 |    INDEX MAINTENANCE   | TEST_B |     |     |            |          |  Q1,01 | PCWP |            |
| 4 |   PX RECEIVE         |          | 75339 |  1839K|    81 (0)| 00:00:01 |  Q1,01 | PCWP |            |
| 5 |      PX SEND RANGE     | :TQ10000 | 75339 |  1839K|    81 (0)| 00:00:01 |  Q1,00 | P->P | RANGE      |
| 6 |     UPDATE           | TEST_B |     |     |            |          |  Q1,00 | PCWP |            |
| 7 |        PX BLOCK ITERATOR |          | 75339 |  1839K|    81 (0)| 00:00:01 |  Q1,00 | PCWC |            |
| 8 |       TABLE ACCESS FULL| TEST_B | 75339 |  1839K|    81 (0)| 00:00:01 |  Q1,00 | PCWP |            |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------注:在并发INSERT的时候,数据是被使用APPEND方式插入到表中,如果需要常规方式插入,需要加上noappend提示.总结:PDML需要显示打开,只有打开了PDML , 才能是真正意义上的并发操作.SQL> alter session enable parallel dml;执行完可以关闭SQL> alter session disable parallel dml;相关阅读:Oracle DML流程 http://www.linuxidc.com/Linux/2012-02/52972.htmPL/SQL“ ORA-14551: 无法在查询中执行 DML 操作”解决 http://www.linuxidc.com/Linux/2013-06/86713.htmMySQL常用DDL、DML、DCL语言整理(附样例) http://www.linuxidc.com/Linux/2013-06/86431.htmOracle基本事务和ForAll执行批量DML练习 http://www.linuxidc.com/Linux/2011-08/39836.htmOracle DML语句(insert,update,delete) 回滚开销估算 http://www.linuxidc.com/Linux/2011-09/43287.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12MongoDB简单调研Oracle 并行查询相关资讯      Oracle DML 
  • Oracle DML错误日志笔记  (01/13/2015 18:34:51)
  • Oracle处理数据(DML+DDL+DCL)+事  (01/25/2014 13:46:28)
  • Oracle的DML操作过程  (08/10/2013 11:03:07)
  • Oracle实现对表dml错误记录日志  (03/04/2014 19:14:45)
  • Oracle表的创建修改及增删改查-DML  (10/27/2013 17:06:37)
本文评论 查看全部评论 (0)
表情: 姓名: 字数