关于oralce并行DML

并行查询
打开与关闭并行查询
alter table table_name parallel;
or
alter table table_name noparallel;

alter table table_name parallel 4;  这条语句是告诉oracle ,在创建这个表的执行计划时使用并行度4
大多时候我们无法确定查询的并行度,需要根据当前的服务器资源。
所以大部分时候都会用
alter table table_name parallel;
我们可以看看执行计划
表 FIANCEITEMDATA 
select * from fianceitemdata
执行计划如下,执行的是全表扫描
SELECT STATEMENT, GOAL = ALL_ROWS 1165 134401 29568220
 TABLE ACCESS FULL GUOYUANUSER FIANCEITEMDATA 1165 134401 29568220
执行
alter table fianceitemdata parallel;

SELECT STATEMENT, GOAL = ALL_ROWS      323  134401  29568220
 PX COORDINATOR          
  PX SEND QC (RANDOM)  SYS  :TQ10000  323  134401  29568220
   PX BLOCK ITERATOR      323  134401  29568220
    TABLE ACCESS FULL  GUOYUANUSER  FIANCEITEMDATA 323 134401 29568220

cost 由1165下降到323

我们从最后一行向上解读一下这个执行计划
最后一行执行了全表扫描
倒数第二行,全表扫描被分解成多个较小的扫描
倒数第三行,倒数第二行 将所有子结果传送给并行查询协调器

这个执行计划有点简单,闲麻烦用pl/sql developer生成的,大家可以用sqlplus看的更清楚一些。
并行DML(PDML)
oracle 将PDML范围限定为insert update delete merge 并不包括select
PDML有别于并行查询,
当一个表是并行的并不够,与并行查询不同,PDML还必须要在会话中启用
alter session enable parallel dml;
PDML采用的是一种伪分布式的实现,存在一些限制
1, PDML操作期间不支持触发器
2, PDML期间,不支持某些申明方式的引用的完整性约束。(都分成N块了让人家怎么去支持)
3, 在提交或回滚前,不能访问PDML修改的表。 全锁了
4, PDML不支持延迟约束
5, 不支持高级复制(高级复制特性的实现要基于触发器)
6, 如果表是分区的,PDML只可能在有位图索引或者LOB列的表上执行,而且并行度取决于分区数
7, 执行PDML时不支持分布式事务。
8, PDML不支持聚簇表。
如果违反了任何一个限制,语句会串行执行或者是产生一个错误。





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23754390/viewspace-706443/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23754390/viewspace-706443/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值