首页 > Oracle > 通过rowid切片优化大表的update和delete,解决undo不够的问题!
2014
03-12

通过rowid切片优化大表的update和delete,解决undo不够的问题!

对于大表的update,delete,很容易引起undo不够的问题,特别是在一个session里面运行的时候,或者由于其他原因导致的回滚操作,这个就比较苦逼了,如果是分区表,可能影响稍微小一点,我们可以按照分区来进行更新,按照分区来进行delete。对于不是分区表的情况,就可以用rowid切片,然后开启多个进程并行处理,这样既能提升不少的速度,也能减少undo,防止死事物恢复太慢。

我这里有test_b表,表中有1465120条数据,我们简单的按照rowid切片对表进行处理

上面的例子,把test_b表分成10个rowid片,运行rowid切片sql的时候,需要传入3个参数,第一个是切片数量,第二个是切片对象,第三个是切片对象所属的对象,也就是owner,sql最终输出的结果可以看到,按照rowid对test_b表进行了切片,在update和delete的时候,分成10个session,加上并行处理,速度比直接update和delete快很多。

点击下载rowid切片脚本

最后编辑:
作者:Jerry
一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL