那些被你忽略的性能 - 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-08

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Kirito的技术分享

分布式限流

经典限流算法 在介绍分布式限流之前,先介绍经典限流算法。经过笔者自己的整理,核心的算法主要可以总结为以下两类四种: A类:计数器法,滑动窗口法 B类:令牌桶法,...

3508
来自专栏JAVA烂猪皮

你完全没了解过的日志异步落库

在互联网设计架构过程中,日志异步落库,俨然已经是高并发环节中不可缺少的一环。为什么说是高并发环节中不可缺少的呢? 原因在于,如果直接用mq进行日志落库的时候,低...

562
来自专栏架构师之路

如何实现超高并发的无锁缓存?

一、需求缘起 【业务场景】 有一类写多读少的业务场景:大部分请求是对数据进行修改,少部分请求对数据进行读取。 例子1:滴滴打车,某个司机地理位置信息的变化(可能...

3437
来自专栏cmazxiaoma的架构师之路

电商毕业设计小节

1295
来自专栏架构师之路

究竟为什么要引入数据库中间件

不少朋友经常会问我以下问题: 58到家有没有使用数据库中间件 使用了什么数据库中间件,是自研,还是第三方 怎么实现的,是基于客户端的中间件,还是基于服务端的中间...

3315
来自专栏Golang语言社区

morestack与goroutine pool

o语言的goroutine初始栈大小只有2K,如果运行过程中调用链比较长,超过的这个大小的时候,栈会自动地扩张。这个时候会调用到一个函数runtime.more...

4666
来自专栏一名叫大蕉的程序员

JVM知识点总览:高级Java工程师面试必备

程序员,就是“一人,一键,二机”行走其间的孤独剑客。我们游走代码江湖,弹指间,便可掀起一场风雨变革。而在江湖中狂荡,必然要练就绝世武功,则需要内外兼备:精妙的招...

692
来自专栏轮子工厂

JVM知识点总览:高级Java工程师面试必备

程序员,就是“一人,一键,二机”行走其间的孤独剑客。我们游走代码江湖,弹指间,便可掀起一场风雨变革。而在江湖中狂荡,必然要练就绝世武功,则需要内外兼备:精妙的招...

531
来自专栏Java架构解析

深入源码分析 Java 线程池的实现原理

程序的运行,其本质上,是对系统资源(CPU、内存、磁盘、网络等等)的使用。如何高效的使用这些资源是我们编程优化演进的一个方向。今天说的线程池就是一种对CPU利用...

1030
来自专栏IT技术精选文摘

MySQL 内核深度优化

1253

扫码关注云+社区