oracle parallel insert,Direct Path Insert与APPEND, PARALLEL的梳理与小结

Oracle里面的写入数据方式分为2种,一个是传统方式写入(conventional insert),另外一个是直接路径写入(direct path insert)。

传统方式写入: Oracle会重用表里面空闲空间,并且写入会先写入到buffer cache。

直接路径写入:Oracle不重用表里面的空闲

空间,直接写入到新分配的块,并且数据直接写入到data file,不写入到buffer

cache。效率更高。如果表的并行度不为1,那么直接路径写入是默认的写入行为(需要开启会话并行dml)。直接路径写入为元数据(例如空间扩展引起的

数据字典数据变化)变更产生REDO, UNDO。而数据变更,redo,undo生成情况如下:

?  不为数据写入生成undo

?  如果数据库为非归档或者没有开启force logging,那么直接路径写入时,不为数据写入产生redo,这时与表是否设置nologging属性无关。

?  如果数据库为归档,但是没有开启force logging,logging的表会产生redo,nologging的表不会产生redo。

?  如果数据库为归档并且开启了force logging,数据写入会产生redo,无论是否设置logging,nologging。

直接路径写入的一些限制:

?

在一个事务里面,可以执行多次直接路径写入,一旦该事物并行修改了表,分区或者索引,当前会话将无法再次方位该对象。例如会话A在表T上进行直接路径写入

后,会话A无法再次访问表T,但是会话B可以查询表T,此时如果会话A执行一个传统路径写入,会被阻塞,等待事件为:enq: TM –

contention。

?  目标表不能是cluster,不能含有object类型字段,不能含有外键约束,触发器。

? 对于目标表是IOT表,也有一些限制。

?  分布式写入无法进行直接路径写入。

APPEND,PARALLE和直接路径写入关系:

Append默认也是采用直接路径写入,不要求session enable parallel。

Parallel 要求会话级别enable parallel,否则将无法进行直接路径写入。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值