《Oracle高性能自动化运维》一一3.4 Redo优化

    xiaoxiao2021-04-19  221

    3.4 Redo优化从前面的内容可以知道,Oracle Redo的产生主要是由DML事务引起的,与DML事务相关的数据库更改主要包含:数据块更改;回滚段数据块镜像更新;数据库内部信息更新(数据字典表更新)。可以通过日志挖掘获取数据库更改的相关信息,如下:

    可以看到,Redo中记录了DML事物的数据块更改、回滚段更新等信息。因此,可以考虑采取以下措施来减少Redo的产生,从而达到优化Redo的目的:减少索引键更新操作;减少大表(键)更新操作;使用Direct Load加载数据;使用Nologging进行特定操作;使用临时表(Temporary Table);;使用外部表(External Table);批量化处理DML业务程序;减少事务Commit次数,采用组提交的方式;减少Select For Update显示锁定,可以明显减少Redo产生;减少表记录的数量规模(利用分区路由架构分区裁剪特性),例如使用分区、分表、分库等策略;减少不必要的DML操作可以减少Redo产生,例如改写、整合SQL程序,优化业务逻辑。可以通过下面的示例验证优化的可行性。(1)采用组提交减少Redo的产生不采用组提交插入数据:

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

    从上述数据可以看出:不采用组提交产生Redo:9268980;采用组提交产生Redo:5241596;组提交大大减少了Redo的产生:4027384(9268980-5241596)。(2)采用临时表可以减少Redo产生采用普通表插入数据:

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

    从上述数据可以看出:普通表产生Redo:5479300;全局临时表产生Redo:1607268;全局临时表大大减少了Redo产生:3872032(5479300-1607268)。可以看到,采用组提交和使用临时表都能有效减少Redo的产生,从而提升数据库的性能。有兴趣的读者可以尝试采用其他措施进行扩展验证。

    相关资源:新年快乐! python实现绚烂的烟花绽放效果

    最新回复(0)