冷菠
冷菠,资深DBA,著有《Oracle高性能自动化运维》,有近10年的数据库运维、团队管理以及培训经验。擅长数据库备份恢复、数据库性能诊断优化以及数据库自动化运维等。目前致力于大数据、智能一体化、开源云计算等领域的佳实践探索。
Oracle Redo是以条目(Redo record)的形式记录数据库的所有更改操作。这些更改包括数据库物理文件的更改,数据库运行状况更改,后台进程的写操作,DML事务操作,数据字典DDL操作,数据库内部递归调用等。其中,最主要的原因是DML事务的操作。
本文将分析Redo对于数据库DML操作的记录信息,并提出通过减少Redo条目达到优化Redo,提高数据库性能的方案。
DML事务相关的数据库更改有哪些?
我们可以通过日志挖掘获取到数据库更改的相关信息,如下:
可以看到,Redo中记录了DML事物的数据块更改、回滚段更新等信息。
如何来减少Redo的产生,从而达到优化Redo的目的
通过示例验证优化的可行性
采用组提交减少Redo的产生:
不采用组提交插入数据:
采用组提交(提交一次)插入数据:
从上述数据可以看出:
不采用组提交产生Redo :9268980;
采用组提交产生Redo: 5241596;
组提交大大减少了Redo的产生:4027384(9268980-5241596)。
采用临时表可以减少Redo产生:
采用普通表插入数据:
采用全局临时表插入数据:
从上述数据可以看出:
普通表产生Redo:5479300;
全局临时表产生Redo:1607268;
全局临时表大大减少了Redo产生:3872032(5479300-1607268)。
论证结论
可以看到,采用组提交和使用临时表都能有效的减少Redo的产生,从而提升了数据库性能。有兴趣的读者可以尝试采用其余措施进行扩展验证。