Oracle 11g 并行DML
来源:互联网 发布:在淘宝买手机要看什么 编辑:程序博客网 时间:2024/06/03 18:34
转自:http://www.linuxidc.com/Linux/2013-08/88608.htm
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流程 http://www.linuxidc.com/Linux/2012-02/52972.htm
PL/SQL“ ORA-14551: 无法在查询中执行 DML 操作”解决 http://www.linuxidc.com/Linux/2013-06/86713.htm
MySQL常用DDL、DML、DCL语言整理(附样例) http://www.linuxidc.com/Linux/2013-06/86431.htm
Oracle基本事务和ForAll执行批量DML练习 http://www.linuxidc.com/Linux/2011-08/39836.htm
Oracle DML语句(insert,update,delete) 回滚开销估算 http://www.linuxidc.com/Linux/2011-09/43287.htm
- oracle 11g 并行DML
- Oracle 11g 并行DML
- oracle 11g 并行DDL
- DML Error Logging in Oracle 10g
- ORACLE 11G R2中的并行执行,dbms_parallel_execute
- Oracle 11g merge into log error及并行注意事项
- Oracle 11g使用DML Error Logging来避免bulk insert故障
- 『ORACLE』 对永久表空间进行DML操作(11g)
- 并行查询,并行DML简介
- DML并行度限制
- 单机11g ogg 双向DML复制
- DML Error Logging in Oracle 10g Database Release 2
- DML Error Logging in Oracle 10g Database Release 2
- Oracle DML
- Oracle 11g 使用 dbms_parallel_execute 对大表进行并行update
- Oracle 11g 使用 dbms_parallel_execute 对大表进行并行update
- ORACLE DML LOCK时找出对应SESSION正在执行的SQL语句(ORA-12841,无法变更事务处理中的会话并行 DML 状态)
- oracle 并行
- 11_自定义样式style
- 变量与延迟变量
- 色 彩 RGB 值 对 照 表
- NIO基础代码例子
- Form Grid
- Oracle 11g 并行DML
- Java 相关优秀书籍推荐(尚学堂推荐)
- 开博.
- 删除IDOC
- 收藏的Android非常好用的组件或者框架。
- ALE 后台配置
- 大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
- JSON.stringify(),JSON.parse(),toJSON()方法使用-20 chapter
- CSS——(1)基础