那些被你忽略的性能 - Oracle Redo的产生场景及优化

冷菠

冷菠,资深DBA,著有《Oracle高性能自动化运维》,有近10年的数据库运维、团队管理以及培训经验。擅长数据库备份恢复、数据库性能诊断优化以及数据库自动化运维等。目前致力于大数据、智能一体化、开源云计算等领域的佳实践探索。

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

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

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

  1. 数据块更改;
  2. 回滚段数据块镜像更新;
  3. 数据库内部信息更新(数据字典表更新)。

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

可以看到,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的产生:

不采用组提交插入数据:

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

从上述数据可以看出:

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

采用组提交产生Redo: 5241596;

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

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

采用普通表插入数据:

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

从上述数据可以看出:

普通表产生Redo:5479300;

全局临时表产生Redo:1607268;

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

论证结论

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

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

那些被你忽略的性能 - Oracle Redo的产生场景及优化

? 冷菠 冷菠,资深DBA,著有《Oracle高性能自动化运维》,有近10年的数据库运维、团队管理以及培训经验。擅长数据库备份恢复、数据库性能诊断优化以及数据...

3138
来自专栏数据和云

举一反三:跨平台版本迁移之 XTTS 方案操作指南

作者 | 罗贵林: 云和恩墨技术工程师,具有8年以上的 Oracle 数据库工作经验,曾任职于大型的国家电信、省级财政、省级公安的维护,性能调优等。精通 Ora...

893
来自专栏沃趣科技

ASM 翻译系列第二十二弹:ASM Internal ASM file number 8

原作者:Bane Radulovic 译者: 郭旭瑞 审核: 魏兴华 DBGeeK社群联合出品 ASM file number 8 ASM元信息8号...

3345
来自专栏PPV课数据科学社区

你用了吗?DBA必备的15款MySQL管理工具

如今,Web应用程序的响应速度是成功的关键法宝之一。它与用户互动,用户对网站的看法,甚至谷歌网站排名情况都有着密不可分的关系。数据库性能是响应速度最重要的因素之...

39811
来自专栏微信终端开发团队的专栏

微信 iOS SQLite 源码优化实践

本文将分享在 SQLite 源码上进行的多线程并发、I/O性能优化等,并介绍优化相关的 SQLite 原理。

2780
来自专栏Laoqi's Linux运维专列

MySQL性能调优 – 你必须了解的15个重要变量

1792
来自专栏Zephery

谈谈个人网站的建立(六)—— 数据库同步

先来回顾一下上一篇的小集群架构,tomcat集群,nginx进行反向代理,服务器异地: ? 由上一篇讲到,部署的时候,将war部署在不同的服务器里,通过spri...

3595
来自专栏沃趣科技

MySQL 8.0 首个自适应参数横空出世

MySQL8.0推出一个号称可以自适应服务器的参数,保证在各种不同的服务器、虚拟机、容器下自动适配服务器资源,让我们一起来看看到底它能做到什么地步。

1193
来自专栏喵了个咪的博客空间

基于PhalApi的DB集群拓展 V0.1bate

#基于PhalApi的DB集群拓展 V0.1bate ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架...

2827
来自专栏idba

MySQL常见slave延迟原因以及解决方法

一 序言 在运维线上M-M 架构的MySQL数据库时,接收的比较多关于主备延时的报警:

793

扫描关注云+社区