ITPub博客

首页 > 数据库 > Oracle > 【恩墨学院】Oracle Redo的产生场景及优化

【恩墨学院】Oracle Redo的产生场景及优化

原创 Oracle 作者:恩墨学院 时间:2018-01-22 14:42:19 0 删除 编辑

【恩墨学院】Oracle Redo的产生场景及优化

Oracle Redo是以条目(Redo record)的形式记录数据库的所有更改操作。这些更改包括数据库物理文件的更改,数据库运行状况更改,后台进程的写操作,DML事务操作,数据字典DDL操作,数据库内部递归调用等。其中,最主要的原因是DML事务的操作。


本文将分析Redo对于数据库DML操作的记录信息,并提出通过减少Redo条目达到优化Redo,提高数据库性能的方案。


DML事务相关的数据库更改有哪些?


1.  数据块更改;

2.  回滚段数据块镜像更新;

3.  数据库内部信息更新(数据字典表更新)。


我们可以通过日志挖掘获取到数据库更改的相关信息,如下:

 OCM 培训课程



可以看到,Redo中记录了DML事物的数据块更改、回滚段更新等信息。


如何来减少Redo的产生,从而达到优化Redo的目的

1.  减少索引键更新操作;

2.  大表(键)更新操作;

3.  使用Direct Load加载数据;

4.  使用Nologging进行特定操作;

5.  使用临时表(Temporary Table);

6.  使用外部表(External Table);

7.  批量化处理DML业务程序;

8.  减少事务Commit次数,采用组提交的方式;

9.  减少Select For Update显示锁定,可以明显减少Redo产生;

10.减少表记录的数量规模(利用分区路由架构分区裁剪特性),例如使用分区、分表、分库等策略;

11.减少不必要的DML操作可以减少Redo产生,例如改写、整合SQL程序,优化业务逻辑。


通过示例验证优化的可行性


采用组提交减少Redo的产生:


不采用组提交插入数据:


OCM 培训课程

OCM 培训课程

采用组提交(提交一次)插入数据:


OCM 培训课程

OCM 培训课程

从上述数据可以看出:


不采用组提交产生Redo :9268980;

采用组提交产生Redo: 5241596;

组提交大大减少了Redo的产生:4027384(9268980-5241596)。


采用临时表可以减少Redo产生:


采用普通表插入数据:


OCM 培训课程

采用全局临时表插入数据:


OCM 培训课程


从上述数据可以看出:


普通表产生Redo:5479300;

全局临时表产生Redo:1607268;

全局临时表大大减少了Redo产生:3872032(5479300-1607268)。


论证结论


可以看到,采用组提交和使用临时表都能有效的减少Redo的产生,从而提升了数据库性能。有兴趣的读者可以尝试采用其余措施进行扩展验证。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28530558/viewspace-2150389/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-01-16

  • 博文量
    180
  • 访问量
    163064