ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于oralce并行DML

关于oralce并行DML

原创 Linux操作系统 作者:木呼 时间:2011-09-01 17:12:30 0 删除 编辑
并行查询
打开与关闭并行查询
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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-04-19

  • 博文量
    93
  • 访问量
    154193