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