oracle create table parallel,create table as及并行相关问题

工作中设计到更新多张千万级数据量的表,需要先统计相关信息,再将信息更新到表中,更新操作需要几个小时才能执行完成。

调整思路为,先统计相关信息到中间表中C,用业务表A和C联查,用create table as方式创建表B,删除A表相关索引、主外键,创建B表索引,主外键,将A表rename为备份表,将B表rename为A。

期间考虑过用Insert into select方式,比较效率后采用create as方式。create table as是ddl语句,insert into select是dml语句,insert into select每一条记录的时候都会产生undo和redo,整个过程相比create table as产生的redo和undo相当多,因此整个过程会慢也是正常的;但是create table as使用的前提是目标表的结构不存在才能使用;当有大量数据的时候不推荐使用Insert into as,因为该语句的插入的效率很慢;

最后增加并行,用create table B  parallel (degree default)  AS方式创建,8千万的数据可以在3分钟内执行完成,还要注意创建完表之后需要关闭该表的并行,不关闭并行可能 引起执行计划错误,查询效率出现问题。

在生产环境执行过程中发现问题:ORA-12805: parallel query server died unexpectedly

重新执行后执行成功,相关文章:

https://community.oracle.com/thread/317343

另外开启并行容易导致RAC服务问题,严重可能导致宕机,注意根据机器调整并行度。

查看各表并行度

select table_name,degree from user_tables;

关闭表并行

alter table B noparallel;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值