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

【问题背景】 为某地市做了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

  cursor cur_account is

    select *

      from accounten a

     where a.isdefaultid = 1

       and a.businessid = 2

       and not exists (select *

你可能感兴趣的:(Oracle,oracle,sql,数据库)