您好,欢迎访问一九零五行业门户网

Oracle 11g 并行DML

并行dml应用在决策支撑系统(decision support system dss)环境时,对于访问大对象时,可扩展性和性能有灰常显著的效果。不能把
oracle 11g 并行dml(pdml)
并行dml应用在决策支撑系统(decision support system  dss)环境时,对于访问大对象时,可扩展性和性能有灰常显著的效果。
不能把pdml当成提高oltp应用速度的一个特性。pdml在大型数据仓库中很有用,它利于大量的数据批量更新。
开启pdml
pdml有别于并行查询,除非显示的请求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 |            |
---------------------------------------------------------------------------------------------------------------------------------------
--发现并没有真正的实现并行.
开启pdml
sql> 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流程
pl/sql“ ora-14551: 无法在查询中执行 dml 操作”解决
mysql常用ddl、dml、dcl语言整理(附样例)
oracle基本事务和forall执行批量dml练习
oracle dml语句(insert,update,delete) 回滚开销估算
其它类似信息

推荐信息