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語句的需求,比如需要更新,自然需要知道最新的資料才行;
consistent gets 是在consistent mode下讀取的block數目。consistent mode呢主要是為了保證Oracle資料一致讀的特性,一般都是在select情況下發生,讀到的資料可能是一個實際存在的block,也有可能需要根據scn資訊以及transaction相關資訊以及復原段中資料來構造。
總結:
由於在Oracle中,取資料最後都是從Buffer中取,所以每出現一個physicalreads必然會出現一次 logicalreads,但是這裡有一個需要注意的地方,就是當出現一個physicalreads後接著會有一個logicalreads這裡,實際上這裡只算了1 block!
所以說,如果以這樣的公式(Physical Reads = db block gets + consistent gets;)來計算Physical Reads,那麼邏輯讀就已經包含了物理讀了。
不管是db block gets還是consistent gets,都可能出現了physicalreads和logicalreads兩種情況,也即是說,db block gets與consistent gets兩者已經構成了一次資料庫操作中讀取的所有block的總次數了。
因此,logicalreads自然也就可以通過如下公式算的:
logicalreads= (db block gets + consistent gets) - physicalreads。
由此,自然也就得出了cache命中率的公式:
Hit Ratio = (db block gets + consistent gets - physicalreads) / (db block gets + consistent gets) * 100%;