oracle数据库,大量做update或insert时超级慢,请老师们帮忙看看和分析下,谢谢!

jyxtt701 2021-01-17 03:53:35
为何我都oracle数据库做update或insert时,更新或插入几百几千很快,十万条要半个小时左右,近百万以上就5个小时以上,要是几百万条以上,就遥遥无期,有一次800多万条想一次性做插入操作,结果50多个小时还没结束,最后只好终止。
以前好像做更新或插入几千万条也很快。
现在用都插入语句是:
insert /*+append+*/ into mytest.xl1 (dh,sj,vi) select /*+ no_merge(a2) use_hash(a2) */ dh,sj,sum(jj) over(order by dh,sj rows between var50 PRECEDING and current row) as vi from mytest.xl a2 where a2.sj<20170000 and a2.sj>20160700;

update a1 set var51=(select vi from ( select /*+ no_merge(a2) use_hash(a2) */ dh,sj,sum(jj) over(order by dh,sj rows between var50 PRECEDING and current row) as vi
from a3 ) a2 where a2.dh=a1.dh and a1.sj=a2.sj );
...全文
3359 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
GradyFeng 2021-08-20
  • 打赏
  • 举报
回复

有同样的问题,请问后来解决了么

hejianbin1985 2021-01-25
  • 打赏
  • 举报
回复
实施直接用数据装载实用工具试试。
jyxtt701 2021-01-19
  • 打赏
  • 举报
回复
jyxtt701 2021-01-19
  • 打赏
  • 举报
回复
跟踪的话,只要执行下insert或update命令就可以马上导出,还是要等insert或update结束后才能把10046事件导出
  • 打赏
  • 举报
回复
要不就做个10046事件,再把trace文件发来大家看看
jyxtt701 2021-01-19
  • 打赏
  • 举报
回复
但有些语句又就飞快,不管是查询还是更新还是插入,几百万条也就几分钟就好。上面那个语句也有些奇怪,20万条左右,要半个小时,50万条左右就要4-5个小时,再多的话,时间就遥遥无期不知道什么时候才能完成。 有人说我的数据有个性能拐点一样。但不知道查
wyqxrj 2021-01-19
  • 打赏
  • 举报
回复
问题很大原因是在 窗口函数统计那个子句
  • 打赏
  • 举报
回复
执行计划发出来看看,这两个表的大小是多大,在执行过程中的等待事件是什么?你这个有可能慢在子查询
  • 打赏
  • 举报
回复
1.可考虑将子查询的结果集先存到临时表里。再处理。看执行计划 2.数据库本身有调优吗?sga,pga 3.底层用raid6,写性能也差
jyxtt701 2021-01-17
  • 打赏
  • 举报
回复
merge into a1 using ( select /*+ no_merge(a2) use_hash(a2) */ dh,sj,sum(jj) over(order by dh,sj rows between var50 PRECEDING and current row) as vi from a1 where sj<20170000 and sj>20160700) a2 on ( a1.dh=a2.dh and a1.sj=a2.sj ) when matched then update set a1.var51 = a2.vi; commit; 2016-2017之间有70万多条,更新了1个小时多还没完成
jyxtt701 2021-01-17
  • 打赏
  • 举报
回复
alter table xl nologging; alter session set skip_unusable_indexes=true; insert /*+append+*/ into mytest.xl1 (dh,sj,vi) select /*+ no_merge(a2) use_hash(a2) */ dh,sj,sum(jj) over(order by dh,sj rows between var50 PRECEDING and current row) as vi from mytest.xl a2 where a2.sj<20170000 and a2.sj>20160700; 用上述方式,20万多条,用时34分钟左右
jyxtt701 2021-01-17
  • 打赏
  • 举报
回复
我的服务器是ibm 3850 x5,内存32g,cpu 16核,硬盘raid6,2T,用户表空间96G,临时表空间64G

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧