oracle逻辑读详解

来源:这里教程网 时间:2026-03-03 19:51:56 作者:

v$sysstat 资料视图中, session logical reads 记录了所有逻辑读,同时这个资料就是 AWR 报告中 load profile 中的 logical reads 数据。

 

逻辑读又被细分为一致读 (consisten read) 和当前读 (db block get) ,也可以在 v$sysstat 里找到。其中一致读针对 select 操作,当前读针对 DML DDL 操作,简单来说一致读是纯粹的读,当前读是为了修改而产生的读操作 ( 修改数据得先访问数据 )

 

区分两种读主要是看 buffer pin 锁的模式,下面是对应关系:

共享 buffer pin 锁—— 一致读,一致读模式

独占 buffer pin 锁—— 修改操作 ( 逻辑写 ) ,修改模式

类似共享模式 buffer pin 锁—— 当前读,当前读模式

 

一致读和当前读的区别就是他们两个加的锁不同而已。

 

当前读模式:

当前读模式就是服务进程在修改一个 buffer 的某行数据前,会先加一个当前读模式的锁,然后去找到这个行的位置。

修改模式:

修改 buffer 的某行数据时,在定位到这个行的位置后,会释放掉当前读模式的锁,转而加一个修改模式的 buffer pin 锁。

 

对于 DML 的当前读模式的锁和 select 的一致读模式的锁,不会互相堵塞;而对于 DML 的当前读模式的锁和 DDL 的当前读模式的锁会互相堵塞。这是为了还处于定位修改行位置的 DML 操作,不会堵塞 select ,却可以堵塞其他的 DML 操作。

相关推荐