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

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所示。
image

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

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

通过表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,如下所示:
image

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,如下所示:
image

可以看到,当数据库恢复引发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中,如下所示:
image
image

可以看到,当进行数据直接路径加载时,系统仍然会将数据直接路径加载的信息记录到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的产生,如下所示:
image
image

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能算法(GA、DBO等)求解零空闲流水车间调度问题(NIFSP)

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年…

android 简单实现圆角,Android 实现圆角图片的简单实例

Android 实现圆角图片的简单实例实现效果图:本来想在网上找个圆角的例子看一看,不尽人意啊,基本都是官方的Demo的那张原理图,稍后会贴出。于是自己自定义了个View,实现图片的圆角以及圆形效果。效果图:Andr…

zookeeper介绍及集群的搭建(利用虚拟机)

ZooKeeper ​   ZooKeeper是一个分布式的,开放源码(apache)的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase、dubbox、kafka的重要组件。它主要用来解决分布式集群中应用系统的一致性问题…

标准库类型String

定义和初始化string对象 初始化string对象方式 string s1 默认初始化,s1是一个空串 string s2(s1) s2是s1的副本 string s2 s1 等价于s2(s1), s2是s1的副本 string s3("value") s3是字面值"value"的副本,除了字面值最后的那个…

轻量级数据库中间件利器Sharding-JDBC深度解析(有彩蛋)

讲师介绍张亮 当当架构部总监 负责分布式中间件和私有云平台建设 目前主导开源项目:Elastic-Job及Sharding-JDBC 主题简介: 1、关系型数据库中间件核心功能介绍 2、Sharding-JDBC架构及内核解析 3、Sharding-JDBC未来展望 一、关系型数据库中间件核心功…

const 常量_条款03:尽可能使用const

const 允许你指定一个语义约束(也就是指定一个“不该被改动”的对象),而编译器会强制实施这项约束。1、const指针如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量&…

javascript高级程序设计---js事件思维导图

绘制思维软件与平时用的笔记,以及导出功能,这三个问题综合起来,于是我把思维导图分开画 1、js事件的基本概念 2、js事件的事件处理程序 3、js事件的事件对象 转载于:https://www.cnblogs.com/Jamie1032797633/p/10567419.html

和 Thrift 的一场美丽邂逅

一. 与 Thrift 的初识 也许大多数人接触 Thrift 是从序列化开始的。每次搜索 “java序列化” “方式”、“对比” 或 “性能” 等关键字时,搜索引擎总是会返回一大堆有关各种序列化方式的使用方法或者性能对比的结果给你,而其中必定少不了 Thrift&#…

弹出框 每次打开 滚动条置顶_微信置顶文字怎么弄?微信置顶一句话教程

今日支付宝红包支付宝首页搜索511501453马上领取红包(支付宝双十二活动,瓜分15亿红包)(领取后一定要记得使用,不然会浪费的呦,更会影响第二天的领取!)奶思靓机“ 一 个 有 用 的 公 众 号 の ”嗨,最近很流行在微信上面…

python 3 面向过程编程

python 3 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就像设计好一条工业流水线,是一种机械式的思维方式。 1、优点:程序结构清晰,可以把复杂的问题简单化&…

在ionic/cordova中使用百度地图插件

在ionic项目中,如果想实现定位功能,可以使用ng-cordova提供的cordova-plugin-geolocation。 但由于高墙的缘故,国内andorid环境下,此插件不起作用(ios环境下可用)。 国内比较好的是现实使用百度地图提供的A…

汉诺塔问题递归算法python代码_[python]汉诺塔问题递归实现

一、问题描述及算法步骤 汉诺塔问题的大意是有三根柱子a, b, c,现在a柱有N个盘子从下往上尺寸递减排列,要求: 1. 将a上的盘子移动到c柱上; 2. 每次移动一个盘子; 3. 柱子上的盘子始终必须是大的在下面image.png 汉诺塔问题的经典实现算法步骤…

plsql 批量调存储过程_数控双端开榫机:批量铣榫头真牛气

数控双端开榫机主要用于实木家具批量化铣榫头专用,因为其本身的优势逐渐被家具厂老板们所接受,是目前家具生产不可缺少的一款自动化设备,给企业节约了生产成本,今天又焦峰小编来给大家讲解一下。主要技术参数:知乎视频…

python时间差怎么转换为数字_pandas进行时间数据的转换和计算时间差并提取年月日...

#pd.to_datetime函数 #读取数据 import pandas as pd data pd.read_csv(police.csv) #将stop_date转化为datetime的格式的dataframe,存到stop_datetime data[stop_datetime] pd.to_datetime(data.stop_date) #自定义一个时间,计算时间差 data_new pd.…

人脸识别html5效果,用HTML5实现人脸识别

注:今天 HTML5 小组沙龙《论道 HTML5 》分享时有朋友问到一个问题, getUserMedia 是否会支持人脸识别,我当时的答案是这应该是应用来实现的功能,而不是规范要完成的工作。而我之前在网上看到过一篇关于 getUserMedia 和人脸识别的…

华为mate40会不会有鸿蒙系统,鸿蒙OS系统正式推送,拿华为Mate40更新后,发现了优缺点...

自从鸿蒙系统正式推送之后,笔者一直都带着好奇心在体验着HarmonyOS 2带来的变化,生怕错过惊喜,也担心系统本身会出现不足。因为鸿蒙系统就像是年轻人一样,才刚刚出炉,需要时间去磨练,然后才能发挥出真正强大…

jstack使用

jstack主要用来查看某个Java进程内的线程堆栈信息,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多,语法格式如下: jstack [option] pid jstack [option] executable core jstack [option] [server-id]rem…

删除目录软链接注意事项

2019独角兽企业重金招聘Python工程师标准>>> 实验环境: 在root 目录下创建一个目录 1 ,并在该目录下创建一个2.txt 的文件,写入内容 1.txt: [rootserver ~]# mkdir 1 [rootserver ~]# echo 1.txt > 1/2.txt [rootserver ~]# tree 1 1 └─…

html如何模拟点击,Javascript 模拟点击事件(点击链接与html点击) 兼容IE/Firefox

一把情况下模拟点击一般两个方面,模拟点击超级连接事件firefox的兼容的函数为对HTMLAnchorElement 加入onclick事件try {// create a element so that HTMLAnchorElement is accessibledocument.createElement(a);HTMLElement.prototype.click function () {if (ty…

mvn编写主代码与测试代码

maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包。默认情况下,Maven假设项目主代码位于src/…