3.3 Redo产生场景
我们知道,Oracle Redo是以条目(Redo Entries/Records)的形式记录数据库的所有更改操作(OP)。更改操作主要包括:
数据库物理文件更改:主要指的是数据库物理文件的增减等操作;
数据库运行状态更改:数据库当前状态版本的更改(Current Status Version),例如数据库检查点(Checkpoint)等操作;
数据库后台进程写操作:数据库后台进程对数据库的操作,例如DBWR写磁盘、LGWR写日志等操作;
DML事务操作:DML事务对数据的更改操作;
数据字典DDL操作:DDL操作会更改数据字典,例如Drop、Truncate等DDL操作;
数据库内部递归调用:更改数据库内部字典表操作。
可以看到,数据库更改是Redo产生的根源,下面将对Redo产生的主要场景进行介绍。
3.3.1 Redo与DML事务
DML事务会产生Redo。DML事务(索引行)与Redo OP的关系如表3-4所示。

索引行DML事务是最典型的DML,因此以索引行DML事物为例进行介绍更具代表性。
以表3-4所示为基础,下面验证索引键(Index Key)DML更新与Redo(OP)的详细关系。
1)基础数据准备,如下所示:

2)以索引键数据更新为基准,经过多次测试得到索引键DML更新与Redo(OP)的详细关系,如表3-5所示。

通过表3-5可以看出:
Step1:将索引键(c1)的值从非Null更新到不同的非Null时,首先对索引键进行更新操作,接着对索引键进行删除、插入操作;
从某种意义来讲,Update操作可以看作Delete操作之后的Insert操作。
Step2:将索引键的值从非Null更新到相同的非Null时,只有索引键更新操作,不会产生回滚和重做信息;
Step3:将索引键的值从非Null更新到Null时,首先对索引键进行更新操作,然后对索引键进行删除操作,没有索引键的插入操作;
Step4:将索引键的值从Null更新到非Null时,首先索引键进行更新操作,接着跳过索引键删除操作直接进行索引键插入操作。
为了简化内容,上述步骤省略了事务开始(OP:5.2)和事务结束(OP:5.4)的描述。
不难看出:
DML中的Null不会影响索引操作;
更新索引键数据时,索引也会相应更新;
当索引创建较多时,索引行DML更新可能会影响到多个索引键的DML更新,这样会产生大量的Redo,从而影响数据库的整体性能。因此,在满足性能需求的情况下,应当尽可能少地创建索引。
3.3.2 Redo与Block Cleanout
在一般情况下,当事务提交后,事务影响的数据块的ITL标识会立即被清除。如果当事务提交后,事务数据块的ITL没有及时被清除(ITL仍处于打开状态),那么将会产生延迟块清除(Delayed Block Cleanout)。
Block Cleanout 会产生Redo,如下所示:

Block Cleanout可以由Select语句产生,这就意味着Select查询也可能产生Redo。Block Cleanout详细内容请参考4.2.3节。
Block Cleanout主要与事务“热块”紧密相关。因此,我们在进行数据库优化设计时,应当尽可能地将“热块”事务分散到不同的数据块中,这样就可以减少Block Cleanout产生的概率,从而减少Redo的产生。
3.3.3 Redo与Block Write
从Oracle 9开始,DBWR进程将Block Buffer写入磁盘操作(Block Write)会被记录到Redo中。与此同时,数据库恢复操作也会引发Block Write,如下所示:

可以看到,当数据库恢复引发Block Write时,系统将Block Write信息完整地记录在Redo中,体现了“Redo记录数据库所有更改”这一特点。
3.3.4 Redo与Hot Backup
当数据库进行热备(Hot Backup)操作时,热备信息会记录在Redo中,如下所示:

可以看到,当数据库进行热备时,系统将热备信息完整地记录在Redo中,确保热备数据的可恢复性。
3.3.5 Redo与Direct Load
当进行数据直接路径加载(Direct Load)时,也会将Direct Load信息记录在Redo中,如下所示:

可以看到,当进行数据直接路径加载时,系统仍然会将数据直接路径加载的信息记录到Redo中。相对于其他方式的数据加载方式,数据直接路径加载将会产生较少的Redo。
Direct Load操作会越过Buffer Cache直接将数据写入磁盘,从而产生较少的Redo。
3.3.6 Redo与Nologging
Nologging 日志记录模式可以减少Redo的产生,但是Nologging的使用需要特别留意,这是因为:
Nologging 方式创建的数据库对象将不可恢复;
一旦数据库对象被设置为Nologging模式后,必须立即进行数据库(对象)备份;
当使用Nologging完成特定操作后,强烈建议将数据库对象的日志记录模式恢复为Logging模式(默认模式)。可使用以下命令实现:
Alter [database] tablespace force logging;
Nologging模式下进行特定的数据库操作可以提升数据库性能,例如,在创建索引时就可以使用Nologging来加快索引创建的速度。
Nologging的使用级别:
对象级(Database/Tablespace/Table等)的使用,如下所示:
Create[Alter] table[index] table_name[index_name] parallel nologging;
SQL语句级的使用,如下所示:

Insert /+ nologging append/ into table_name select from xxx..;
Nologging可以减少Redo的产生,如下所示:

可以看出,采用Nologging模式后,Redo产生量大幅度降低。

《Oracle高性能自动化运维》一一3.3 Redo产生场景相关推荐

  1. 《Oracle高性能自动化运维》一一2.3 Library Cache

    本节书摘来自华章计算机<Oracle高性能自动化运维>一书中的第2章,第2.3节,作者:冷菠 著,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.3 Lib ...

  2. 《Oracle高性能自动化运维》一一第1章 Linux下的Oracle

    第1章 Linux下的Oracle 众所周知,Oracle数据库与Linux操作系统是行业内使用最为广泛.功能最为强大的数据库/操作系统之一.随着企业业务的不断发展,越来越多的Oracle数据库被部署 ...

  3. 《Oracle高性能自动化运维》一一2.5 小结

    2.5 小结 本章主要介绍了Oracle Buffer Cache/Library Cache内存结构,同时结合Latch/Lock保护机制对内存结构知识进一步深化,帮助读者更好地理解掌握Oracle ...

  4. 介绍一下当前使用的Oracle数据库自动化运维方式

    介绍一下当前使用的Oracle数据库自动化运维方式 整体结构 12C API system 整体结构 不管12C还是11G集群使用的都是svn+httpd+RPM+运维脚本的方式. SVN:运维脚本管 ...

  5. oracle牛人课堂,【美创】Oracle数据库自动化运维 - 安全牛课堂 - 领先的信息安全在线教育平台...

    { "i18nChapterName": "章", "i18nUnitName": "节", "i18nLes ...

  6. 函数计算进行自动化运维专题

    前言 通常来说,自动化运维有两种类型的运维方式: 定时的脚本任务, 比如定时更换云服务的 acess key secret , 定时检查 ecs 对外暴露的端口等 报警事件的紧急处理, 比如 ecs ...

  7. 什么是自动化运维?自动化运维必备技能有哪些?

    万丈高楼平地起,高楼稳不稳取决于地基是否扎实.基础数据便是运维管理这座高楼的地基. 首先介绍一下我们在运维管理中所涉及到的基础数据有哪一些.请看下图: 基础数据大致分为CMDB.日志.生产DB.知识库 ...

  8. 如何做好自动化运维?自动化运维必备技能有哪些?

    万丈高楼平地起,高楼稳不稳取决于地基是否扎实.基础数据便是运维管理这座高楼的地基. 首先介绍一下我们在运维管理中所涉及到的基础数据有哪一些.请看下图: 基础数据大致分为CMDB.日志.生产DB.知识库 ...

  9. Linux集群和自动化运维

    Linux/Unix技术丛书 Linux集群和自动化运维 余洪春 著 图书在版编目(CIP)数据 Linux集群和自动化运维/余洪春著. -北京:机械工业出版社,2016.8 (Linux/Unix技 ...

最新文章

  1. 久违了我的博客园《人生的体会》
  2. mysql和oracle的锁_关于数据库行锁与表锁的认识
  3. 如何注入值到Spring bean属性
  4. ./ffmpeg: error while loading shared libraries: libavdevice.so.57
  5. 从零学习机器学习_机器学习:如何从零变英雄
  6. 拖拽的方式使用qbuttongroup_【无机纳米材料科研制图——Photoshop 0402】PS使用选框工具修改图片/图层...
  7. Java利用stream(流)对map中的values进行过滤、排序操作
  8. matlab netcdf,Matlab读取Netcdf文件
  9. 如何把图纸转换为t3格式_CAD图纸快速转换天正T3格式_鹏业CAD云服务
  10. 【F1C100S】编译启动所需的uboot,kernel,rootfs
  11. python画circos图_CIRCOS圈图绘制 – 最简单绘图和解释
  12. dp主机_miniDP转DP和type-C转DP连接线上机简单测评
  13. vPro平台再进化:专为商务而生,助力企业数字化大时代
  14. Sky光遇云野光之翼在哪获得
  15. 关于显著性检验,你想要的都在这儿了!!(基础篇)
  16. 【C语言算法】归并排序
  17. 实现一个简单的计算器,输入一个包含圆括号、加减乘除、求余等符号组成的算术表达式字符串,输出该算术表达式的值
  18. 2016版excel_有win10系统excel打开慢的问题来看
  19. 太空射击python
  20. (九五至尊)九大管理体系,五大过程组:软考高级信息系统项目管理师

热门文章

  1. php delete和truncate,TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。...
  2. UVA - 1592:Database
  3. C++11 标准新特性:委派构造函数
  4. 【汇编语言】记录一组数中负数的个数,8086与MIPS汇编程序
  5. java基础教程哪个好,面试必会
  6. 7年老Android一次操蛋的面试经历,挥泪整理面经
  7. 爆赞!Android岗大厂面试官常问的那些问题,论程序员成长的正确姿势
  8. 这篇文章可以满足你80%日常工作!一线互联网公司面经总结
  9. hibernate的多表查询
  10. sys.modules[__name__]的一个实例