oracle undo 复杂度--oracle核心技术读书笔记四
一. 概述
undo 保存的是旧数据。比方,你改动了一条记录将A列abc改动为def,那么undo里面保存的就是abc。目的有两个:1. 假设你的事务没有提交,可是已经将A列改动,那么别人读取这条数据的时候。不应该可以看到你改动后的内容def。应该还仅仅能看到abc。这个时候就须要去读取undo。才干取到abc。 2. 假设你的事务后来失败,须要将A列由改动过的值def回退到之前的值abc,abc也要从undo里面去取。
这篇文章,简要介绍一下读一致性(也就是别人无法读取到你改动的未提交的内容)与回滚(事务失败,回滚改动记录)是怎么实现的。
二. 读一致性
假如会话1 9:00开启事务,9:02分会话2改动了一条数据由A改动为了B。接着9:03分会话2又将同一条数据由B改动为C,会话2还没有提交。
会话1 9:04分读取这条数据,应该读取到的是A,可是缓存中这条数据已经被改动成C了,那么怎么取到A呢。oracle是这样处理,在缓存中找到这条数据。发现这条数据被另外的会话改动了,并且另外一个会话还没有提交,查看改动时间发现是9:03分,比我会话开启时间9:00要晚,于是在数据块的事务槽中找到 另外一个会话这条改动相应的undo记录,这个时候会读取undo块,假设undo已经被刷新输出到磁盘,还须要从磁盘中又一次读取出来。
这个时候找到的是9:03改动相应的undo块。找到的旧数据是B。假设这条undo记录是9:00之前。我们就不须要往前找了。可是我们发现是9:03,我们还须要找找这条undo前面是否还有undo(本身undo记录会记录上一个undo记录的地址)。我们能找到9:02分那条undo记录。接着再往前找发现没有了,那么9:02分那条undo记录里面的旧数据A就是我们要找的数据了。听起来好绕,给个图:
三. 回滚
回滚就是,事务失败了,我们须要将这个事务所做的改动全部回退。
说读一致性的时候,我们主要关注的是找数据所在的单个块,然后找这个块全部的undo记录的一个指针链表。从块開始,一直往后找,直到定位到一个足够老的undo数据。那么回滚事实上也类似,回滚说的就是事务的历史,我们须要事务中全部的undo记录反向排序的指针链表,从最后做的改动開始回退,一直回退到事务做的第一个改动。
回滚和读一致性看起来差点儿相同。事实上有一个重要的不同之处。读一致性,我们是在内存中生成一个数据块的拷贝。应用undo记录到该拷贝块上,一旦完毕相关操作,拿到了旧数据。就会迅速舍弃这个块拷贝,由于我们的目的是拿到旧数据。并非真的要改变数据。
回滚就不同,回滚是要拿到当前真正的数据块,并应用undo记录来还原。
1. 回滚操作的是当前数据块,undo应用于当前数据块,终于所做的改动是要持久化到磁盘的。而读一致性是不须要的。
2. 回滚操作的是当前数据块,所以当我们改变它的时候(回滚就是改变),会生成重做(redo),至于会不会生成undo这个没有验证。
3. 回滚操作不仅跟读一致性一样可能须要从磁盘读取undo数据,还有可能须要从磁盘读取改动的数据,由于改动的数据假设已经被刷新输出到磁盘,还须要又一次从磁盘调出来。然后将其值回退到旧值。
假设事务比較长。到最后事务失败,那代价是很大的,回退须要消耗的时间,跟正常事务的时候差点儿相同,甚至很多其它。
oracle undo 复杂度--oracle核心技术读书笔记四的更多相关文章
- 【转载】MDX Step by Step 读书笔记(四) - Working with Sets (使用集合)
1. Set - 元组的集合,在 Set 中的元组用逗号分开,Set 以花括号括起来,例如: { ([Product].[Category].[Accessories]), ([Product].[ ...
- 【转】Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记(四)
Verilog HDL常用建模方式——<Verilog与数字ASIC设计基础>读书笔记(四) Verilog HDL的基本功能之一是描述可综合的硬件逻辑电路.所谓综合(Synthesis) ...
- how tomcat works 读书笔记四 tomcat的默认连接器
事实上在第三章,就已经有了连接器的样子了,只是那仅仅是一个学习工具,在这一章我们会開始分析tomcat4里面的默认连接器. 连接器 Tomcat连接器必须满足下面几个要求 1 实现org.apache ...
- 阅读《Oracle内核技术揭秘》的读书笔记
阅读<Oracle内核技术揭秘>,对oracle的内存结构.锁.共享池.undo.redo等整理成了如下的思维导图:
- 《SDN核心技术剖析和实战指南》3.1控制器核心技术读书笔记
在SDN的架构中,控制器可以说是SDN的核心,它负责对底层转发设备的控制以及向上层应用提供可编程性的北向接口.从实现上看,主要分三个层面来考虑,南向接口技术,北向接口技术以及东西向的可扩展性能力.下面 ...
- Java核心技术读书笔记02
第四章 对象和类 类之间的关系 最常见的三种关系 依赖("uses-a") Order依赖Account类看信息 聚合("has-a") Order包含多个It ...
- Java核心技术读书笔记01
Volume I Chapter 1 An Introduction to Java • 1.1 Java as a Programming Platform• 1.2 The Java ‘Whi ...
- Java核心技术-读书笔记
基本语法 Java中的所有函数都属于某个类的方法 Java没有任何无符号的int.long.short 或 byte 类型 浮点数值不适用于无法接受舍入误差的金融计算中,比如2.0-1.1不会输出想要 ...
- TCP/IP知识总结(TCP/IP协议族读书笔记四)
参考:http://blog.chinaunix.net/uid-26275986-id-4109679.html 继续!TCP的流量控制和拥塞控制. TCP相对UDP可靠的地方在于它的拥塞控制.流量 ...
随机推荐
- MongoDB系列之三(副本集配置)
今天我测试了一下MongoDB的副本集的配置. 首先从概念上说一下MongoDB副本集和主从复制的区别.其实副本集(Replica Set)是主从复制的高级形式.高级在哪里呢?主动复制实现了数据备份+ ...
- Ubuntu Crontab
Ubuntu启用Crontab 启动cron服务: service cron start 如果需要设置为开机时自动启动,则执行 sysv-rc-conf --level 35 cron on 另外,u ...
- 根据li标签 查找class="alcw4 alcw41"对应的值
jrhmpt01:/root/lwp/0526# cat a2.pl use LWP::UserAgent; use DBI; use POSIX; use Data::Dumper; use HTM ...
- .net程序员面试不完全指南
程序员找工作难,想要被成功聘用更难.最常见的办法是经历一次又一次的面试失败后自己琢磨出面试技巧,当然也可以花钱到一些培训机构去接受专业的书面简历和模拟面试的指导.这些方法可能都会奏效,但是却并不是时间 ...
- linux安装Tesseract-OCR
安装Tesseract-OCR 1. leptonica 需要源码编译安装http://www.leptonica.org/ leptonica 包: leptonica-1.73.tar.gz 解 ...
- android原生browser分析(一)--Application
类Browser.java是整个应用的Application.其代码例如以下: public class Browser extends Application { @Override public ...
- win32多线程程序设计笔记(第二章)
第二章线程的第一次接触,主要讲了如何创建线程以及需要注意的几点. 一.创建线程 与调用函数的过程类似;线程只不过用CreateThread的API将函数封装起来,并产生一个与主程序同时执行的程序来调用 ...
- Linux中more命令的实现
#include <stdio.h> #include <stdlib.h> #include <string.h> #define PAGELEN 24 #def ...
- Android studio ElasticDownloadView
找到个开源项目,地址:https://github.com/Tibolte/ElasticDownload 下载进度效果: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...
- 引用类中的enum
引用类中的enum 引用类中的enum,需要加类的域class_name::value_in_enum_name 点击(此处)折叠或打开 #include <stdio.h> #inclu ...