ORACLE的物理读与逻辑读
PhysicalReads(物理读):

物理读的内容不在内存中,要去硬盘中读入内存。
计算公式可以如下:PhysicalReads=dbblockgets+consistentgets;
LogicalReads(逻辑读):

逻辑读内容在内存中,不需要读硬盘。
dbblockgets--从buffercache中读取的block的数量。
consistentgets--从buffercache中读取的undo数据的block的数量。
dbblockgets是在currentmode下读取的block数目。currentmode下读取数据是为了保证读取到的数据是当前时间点上最新的数据,这样做的目的一般都是为了DML语句的需求,比如需要更新,自然需要知道最新的数据才行;
consistentgets是在consistentmode下读取的block数目。consistentmode呢主要是为了保证Oracle数据一致读的特性,一般都是在select情况下发生,读到的数据可能是一个实际存在的block,也有可能需要根据scn信息以及transaction相关信息以及回滚段中数据来构造。
总结:
由于在Oracle中,取数据最后都是从Buffer中取,所以每出现一个physicalreads必然会出现一次logicalreads,但是这里有一个需要注意的地方,就是当出现一个physicalreads后接着会有一个logicalreads这里,实际上这里只算了1block!
所以说,如果以这样的公式(PhysicalReads=dbblockgets+consistentgets;)来计算PhysicalReads,那么逻辑读就已经包含了物理读了。
不管是dbblockgets还是consistentgets,都可能出现了physicalreads和logicalreads两种情况,也即是说,dbblockgets与consistentgets两者已经构成了一次数据库操作中读取的所有block的总次数了。
因此,logicalreads自然也就可以通过如下公式算的:
logicalreads=(dbblockgets+consistentgets)-physicalreads。
由此,自然也就得出了cache命中率的公式:
HitRatio=(dbblockgets+consistentgets-physicalreads)/(dbblockgets+consistentgets)*100%;