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数据,还有可能须要从磁盘读取改动的数据。由于改动的数据假设已经被刷新输出到磁盘,还须要又一次从磁盘调出来,然后将其值回退到旧值。假设事务比較长,到最后事务失败。那代价是很大的。回退须要消耗的时间,跟正常事务的时候差点儿相同,甚至很多其它。

时间: 2024-10-29 19:05:42

oracle undo 复杂度--oracle核心技术读书笔记四的相关文章

Oracle事务原理探究1--oracle核心技术读书笔记五

1. 冲突解决 假如有一个系统只有你和我两个用户,并且我们都在持续对系统中一小部分数据做修改和查询操作. 如果你正在数据库中做一批修改操作,而我正在做查询,我一定不能看到你所做的修改,直到你告诉我可以看到你所做的所有更改才行(你提交了事务).因此在oracle内部,必须有一个高效的办法来识别哪些数据我可以看到,哪些数据我不可以看到. 从相反的角度来看,在你提交事务的时候,你需要一种高效的机制让其他所有人能够看到事务已经提交(也就是要告诉别人你所有修改过的数据都是可见的了).更极端一点的情况是,你

R实战读书笔记四

第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括如下. 一图胜千字,人们从视觉层更易获取和理解信息. 图形工作 R具有非常强大的绘图功能,看下面代码. > attach(mtcars) > plot(wt, mpg) > abline(lm(mpg~wt)) > title("Regression of MPG on Weight") > detach(m

悟道—位IT高管20年的职场心经(读书笔记四)

悟道--一位IT高管20年的职场心经 第四章 人情练达即文章 "问世间情为何物,直教人生死相许" 那是说的爱情. 职场中的人情实在没那么浪漫, 很多时候是冷冰冰的, 但是你必须去面对, 以积极的.正面的心态去面对. 不但要面对,还要苦心经营. 1.1  谁都别惯着:下属不能惯 学会安排事情,分担事情. 1.2  谁都别惯着:老板不能惯 怎么样去和不同性格的老板交流,老板也有他自己的不足的地方,在这种情况下,最好是自己有自己的解决问题的方法. 1.3  谁都别惯着:客户不能惯 对客户,有

《高效能程序员的修炼》读书笔记四

第一章第三节:如何培养写作习惯 -------------------------------- 我个人一直坚信要成为一名优秀的程序员,其实和写代码是没有多大关系的(刚好本书作者也是这样的想法).当然,作为一名程序员的话,具有一定水平的技术能力还是需要的.但,个人觉得更重要的是良好地沟通技巧. 本书作者的合伙人Joel Spolsky有过这样一段话: 杰出的程序员跟勉强过得去的程序员之间的差别,不在于他们掌握了多少种编程语言,也不在于他们谁更擅长Python或Java.真正的关键是,他们能不能把

《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构

一.网站性能测试 (1)性能测试指标:①响应时间:②并发数:③吞吐量:④性能计数器: (2)性能测试方法:①性能测试:②负载测试:③压力测试:④稳定性测试: (3)性能优化策略: ①性能分析:检查请求处理各个环节的日志,分析哪个环节响应时间不合理,检查监控数据分析影响性能的因素: ②性能优化:Web前端优化,应用服务器优化,存储服务器优化: 二.Web前端性能优化 (1)浏览器访问优化: ①减少http请求:因为http是无状态的,每次请求的开销都比较昂贵(需要建立通信链路.进行数据传输,而服务

《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件

前面两篇文章介绍了淘宝的发展历程.Java时代的变迁和淘宝开始创新技术: <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源 <淘宝技术这十年>读书笔记 (二).Java时代的脱胎换骨和坚若磐石 <淘宝技术这十年>读书笔记 (三).创造技术TFS和Tair 这篇文章主要讲述分布式时代和中间件相关知识,包括服务化.HSF.Notify和TDDL.同时里面有我们经常遇见的编码错误等相关问题,希望文章对你有所帮助! 一. 分布式时代 1.服务化 在系统发展的过程中,架构

how tomcat works 读书笔记四 tomcat的默认连接器

其实在第三章,就已经有了连接器的样子了,不过那只是一个学习工具,在这一章我们会开始分析tomcat4里面的默认连接器. 连接器 Tomcat连接器必须满足以下几个要求 1 实现org.apache.cataline.Connector接口 2 负责创建实现了org.apache.cataline.Request接口的request对象 3 负责创建实现了org.apache.cataline.Response接口的response对象 这里默认的连接器的原理很简单,就是等待http请求,创建re

《javascript语言精粹》读书笔记四

第七章 正则表达式 正则表达式是处理字符串的最强道具,没有之一. 通过正则表达式,我们可以非常简便的对字符串进行各种操作,这里就对此就不对这章进行总结,之后对正则表达式进行一次专门的总结. 第八章 方法 '+'运算符在较新的浏览器中,进行过较多的优化,会对该运算符进行优化,比array.join函数运行速度要快的多. array Array.concat和Array.slice函数可以生成新的数组. Array.shift函数通常比pop速度要快. 在使用Array.sort回调函数中,默认会将

Oracle redo 复杂度--oracle核心技术读书笔记三

一. 概述 我们知道,在oracle中,每修改一条数据都会生成一条重做数据(也就是redo,里面记录了修改后的内容).目的就是为了将修改的数据备份,方便今后重做.现在有一个问题.oracle中只要修改数据,都会生成redo,这些redo会存放在一个叫做重做日志缓冲区里面.如果同时多个回话在修改数据,都要往重做日志缓冲区写入内容,就存在为同一片内存区域竞争的问题.存在竞争,就存在开销,这篇文章大概介绍一下,oracle如何尽量降低这种开销. 二.  问题概述 oracle中不断地修改数据,源源不断