问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

究竟怎么理解Oracle中的物理读,逻辑读,即时读,一致读和读一致性

发布网友 发布时间:2022-04-23 07:39

我来回答

2个回答

懂视网 时间:2022-04-08 23:24

oracle保证读一致性原理   1:undo segment的概念                   当数据库进行修改的时候,需要把保存到以前的old的数据保存到一个地方,然后进行修改,用于保存old数据的segment 就是undo segment。 以前老的东西是可以被覆盖掉的,因为undo segment是一种循环利用的方式。 看下图   技术分享   如上图所示: 当oracle开启一个事务对table表中的数据进行修改,修改的那个数据(行数据)会被拷贝到 右图 undo  segment(用圆形表示是因为表示会被覆盖)中,这个时候事务没有提交,在这个时候查询table中的数据,进行全部查询的时候, 当进行全表扫描 扫描到 被事务修改的数据时候,oracle发现这是一条在事务中没有提交的数据,就会到 对应的 undo segment中进行查找以前的数据,这样 只要修改该表的事务没有提交,oracle查询这个表得到的数据就是以前没有修改的数据。 这样就保证了 读一致性。   下面这个图是oracle online doc上面的图: 联机文档中的解释为:   技术分享   解释上图:   SCN  (System change  number): 这个号相当于oracle数据库的一个自己 的时钟,用于记录数据改变的时刻。 Rollback  segment和 undo  segment 是同义的。   图中 黑色的标记 代表  oracle 中用户有一个事务正在对这两个数据(scn为 10024)进行处理, 当事务开启的时候,oracle会首先把表中的这两个数据拷贝到 undo segment中, 拷贝的这两个数据都带有 各自的 SCN号。 如上图所示,这两个数据的未被修改前的 SCN分别为: 10008 和 10021. 当修改这两个数据的时候 ,会给这两个数据赋予新的 SCN (就相当于一个标记什么时刻修改的这个数据)。这个时候修改这两个数据(SCN为 10008和 10021正在进行),事务正在进行没有提交。   查询的执行的sql语句也会有一个SCN(这个SCN是这个表最后一次修改提交的SCN) 这个时候 ,有一个查询需要对这个表进行全表扫描(select  *  from  table_name) , 开始执行查询的时候会有一个 SCN号,然后对这个表进行全表扫描,当扫描 的时候,oracle会用当前查询的SCN和这个表中每个数据的SCN号进行比较,如果这个数据的SCN小于<查询的SCN号,证明这个数据当前没有修改,如果这个数据的 SCN >大于 当前查询的SCN号,表示这个数据在当前查询时刻正在有事务对这个数据进行修改,这个时候查询会到对应的undo segment中查找,SCN< 当前查询的SCN的数据(也就是事务修改前的数据(这里指 10008 和 100021 这个两个数据)),然后一起把这些数据返回, 得到的数据就是事务没有修改前的数据。 这样即使有多个事务对这个表进行修改,查询得到的结果依然是事务没有提交前的 原来的数据。 这样就保持了读一致性。

oracle如何保证读一致性

标签:

热心网友 时间:2022-04-08 20:32

1. 物理读
这个很容易理解,cpu需要的数据在内存中找不到,那么此时必须去物理磁盘上获取,必然产生物理i/o。
反应在oracle中,就是会话需要某条数据时,在内存的buffer cache中中没有,此时就要去磁盘上的dbf文件中读取。就产生物理读。
2. 逻辑读
这个概念是最清晰,但同时又是最模糊的。
按照计算机原理来讲,逻辑读,表示cpu需要的数据在内存中被找到,数据被直接从内存中传入cpu执行。
3. 即时读(又叫当前读)
按照tom大师的描述:
当前读(Current read):得到块来实际更新所要修改的行时,所完成的获取就是当前读。
这么话怎么理解?
A:读块的时候要加锁。如果读块的目的是为了定位行、然后修改,这时加的锁和纯读的锁并不一样,虽然它们两个都是读操作。
因为加的锁不同,就有了当前读和一致读。
4. 一致读
按照tom大师的描述:
一致读(Consistent read):“发现”要修改的行时,所完成的获取就是一致读。
这么话怎么理解?
A:一致读和当前读放在一起时,一致读指的纯读。
5. 读一致性
这个概念,无庸置疑。
读一致性:Oracle在需要时会使用undo数据来构造CR块,从而提供非阻塞的查询。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“泛览周王传”的出处是哪里 避事的意思是什么 怠息的意思是什么 “偷闲来此一嚬呻”的出处是哪里 怠息意思和来源是什么 客厅中间沙发旁旁边放什么 客厅沙发旁边放什么合适 沙发左右摆什么位置 淘宝网无法注册邮箱验证 谁能帮我注册一个谷歌帐号,我一直注册不成功,淘宝上也买不到,在线等... 蔷薇少女里纯读的学校叫什么 优酷客户端下载视频到一半自动关闭了 上面一个草字头下面一个纯金的纯念什么 手机优酷短视频模式怎么关掉? 草字头下面加个纯念什么 用优酷看视频,看一会就自动退出全屏模式,但是退出后出现那种假死状态。 草字头加纯读什么 优酷pc客户端老是看视频的时候自动关闭时怎么回事 草字头加纯加纯读什么 单人旁一个纯读什么 优酷过滤短视频关闭怎么在打开收费吗 有没有纯阅读本地小说的手机应用 每次用酷狗 奇异,优酷,风行等播放器 放视频 都会自动关闭 一个草字头下边一个纯念什么 为什么一看优酷视频就自动关机 去美国纯读语言,怎么拿到签证 优酷上的视频怎么好关闭啊??? 如何在家打造纯阅读空间? 微博和优酷这两个手机app,点击开里面的视频,就会自动关闭然后说已经停止运行,怎么解决?有时候重新 去美国纯读语言 程序员做开发和测试哪个有前途? 糖醋萝卜干怎么腌好吃又脆 维修苹果6s的主板要多少钱? 腌酸甜萝卜条,应该怎么腌? 程序员测试工程师如何提高职位的影响力 苹果6s+plus换主板多少钱? 苹果6s主板坏了,维修需要多少钱 Java程序员转为测试员有前途吗? IPhone6换主板大概价格多少? 程序员转软件测试需要准备什么? 在项目开发的时候,程序员还有测试的工作要做吗? 我是一名Java程序员,但想干测试可以吗?会有困难吗?因为我对测试一点也不懂 程序员转行做测试是不是很简单 做软件测试比程序员工作更难吗? 农村萝卜干的腌制方法 将程序员写好的程序进行测试有什么意义。为什么要进行测试?为什么不根据页面效果来测试? 想问一下,iPhone 6s主板坏了修一下多少钱 软件测试员主要做些什么事,入行门坎高吗 java程序员如何编写更好的单元测试 程序员转测试怎么样?