Oracle物理读与逻辑读

2014-11-24 18:37:31 · 作者: · 浏览: 1

Physical Reads(物理读):


逻辑读内容在内存中,不需要读硬盘。


计算公式可以如下:Physical Reads = db block gets + consistent gets;




Logical Reads(逻辑读):


物理读是内容不在内存中,要去硬盘中读入内存。




db block gets --从buffer cache中读取的block的数量。
consistent gets --从buffer cache中读取的undo数据的block的数量。


db block gets 是在current mode下读取的block数目。current mode下读取数据是为了保证读取到的数据是当前时间点上最新的数据,这样做的目的一般都是为了DML语句的需求,比如需要更新,自然需要知道最新的数据才行;




总结:


由于在Oracle中,取数据最后都是从Buffer中取,所以每出现一个physicalreads必然会出现一次 logicalreads,但是这里有一个需要注意的地方,就是当出现一个physicalreads后接着会有一个logicalreads这里,实际上这里只算了1 block!


所以说,如果以这样的公式(Physical Reads = db block gets + consistent gets;)来计算Physical Reads,那么逻辑读就已经包含了物理读了。


不管是db block gets还是consistent gets,都可能出现了physicalreadslogicalreads两种情况,也即是说,db block gets与consistent gets两者已经构成了一次数据库操作中读取的所有block的总次数了。



因此,logicalreads自然也就可以通过如下公式算的:


logicalreads= (db block gets + consistent gets) - physicalreads