网站首页 > 文章中心 > 其它

oracle逻辑读怎么算

作者:小编 更新时间:2023-10-18 19:32:12 浏览量:270人看过

oracle中逻辑读的单位是什么?

有两种读:逻辑读和物理读

数据库读写的单位是数据块.当用户最终得到的结果可能只是某个数据块中的几行或几列.当一个查询语句被执行时,服务器进程会将相关的数据块从数据文件中写入内存(buffer cache).这就叫做物理读.每读取一个数据块,即是一次物理读.

而用户需要的并不是整个数据块,而是其中的几行或几列.从buffer cache中提取行的过程,便是逻辑读.

而其中逻辑读又分成两种:即时读(current read)和一致性读(consistent read).

(1)即时读::即时读就是读取数据块当前的最新数据.任何时候在buffer cache中都只有一份当前数据块.即时读通常发生在对数据进行修改,删除操作时.这时,进程会给数据加上行级锁,并且标识数据为"脏数据".

一致性读就是为了保证数据的一致性.在Buffer Cache中的数据块上都会有最后一次修改数据块时的SCN.

如果一个事务需要修改数据块中数据,会先在回滚段中保存一份修改前数据和SCN的数据块,然后再更新Buffer Cache中的数据块的数据及其SCN,并标识其为"脏"数据.

当其他进程读取数据块时,会先比较数据块上的SCN和自己的SCN.如果数据块上的SCN小于等于进程本身的SCN,则直接读取数据块上的数据;

如果数据块上的SCN大于进程本身的SCN,则会从回滚段中找出修改前的数据块读取数据.通常,普通查询都是一致性读.

综合上面所讲的,逻辑读的原理和过程比较复杂.逻辑读的单位并不能简单的认为是个块.

oracle如何读取数据

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

① 物理读

这个很容易理解,cpu需要的数据在内存中找不到,那么此时必须去物理磁盘上获取,必然产生物理i/o.

反应在oracle中,就是会话需要某条数据时,在内存的buffer cache中中没有,此时就要去磁盘上的dbf文件中读取.就产生物理读.

这个概念是最清晰,但同时又是最模糊的.

按照计算机原理来讲,逻辑读,表示cpu需要的数据在内存中被找到,数据被直接从内存中传入cpu执行.

按照tom大师的描述:

当前读(Current read):得到块来实际更新所要修改的行时,所完成的获取就是当前读.

这么话怎么理解?

A:读块的时候要加锁.如果读块的目的是为了定位行、然后修改,这时加的锁和纯读的锁并不一样,虽然它们两个都是读操作.

因为加的锁不同,就有了当前读和一致读.

一致读(Consistent read):"发现"要修改的行时,所完成的获取就是一致读.

A:一致读和当前读放在一起时,一致读指的纯读.

这个概念,无庸置疑.

读一致性:Oracle在需要时会使用undo数据来构造CR块,从而提供非阻塞的查询.

以上就是土嘎嘎小编为大家整理的oracle逻辑读怎么算相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章