【Oracle】多次提交造成性能慢及处理方法

本文分析了一次提交与分批提交在Oracle数据库中的效率差异,揭示了频繁COMMIT导致的性能问题。通过修改存储过程,将COMMIT操作改为每处理10000条数据提交一次,显著提高了脚本执行效率。提供了问题脚本及其优化后的版本作为示例。
摘要由CSDN通过智能技术生成

【问题背景】 为某地市做了1个脚本用于帮客户账户添加一个新的账本。犯了一个很二的错,存储过程如下(SQL记录用户以后查询),一晚上只执行了190W数据 脚本如下 数据库中总共有500W或者更多的客户。

【问题原因】 但由于每次循环时都COMMIT提交,导致效率低,

      相比之下,每1W条提交,肯定是更有效率的
因为每一次commit会触发LGWR做很多相应的操作,将重做BUFFER中的数据写到日志当中,然后去处理回滚段的相应信息,让回滚段中900秒(默认)之外的信息可以被重写。
也就是每一次commit都会带来大量的操作。
但是,commit的数据,也并不是全部完成之后提交一次效率就高了,因为还要看data_buffer的大小。
commit与数据写DBF的时机是没啥关系的,那个取决于CKPT.

【解决方法】 分批次处理 : 例如处理完10000个客户后才提交一次,使用MOD除法函数实现

【效率低的问题脚本】

  --20130802

  --liuyong

  --修正信息: 1-普通预存款余额

  create or replace procedure prc_createacctbook is

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小董的数据库进阶之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值