db block gets 與 consistent read gets

studywell發表於2019-09-28

轉: http://blog.itpub.net/26110315/viewspace-730452/


db block gets 與 consistent read gets


對這兩個概念一直模模糊糊,弄清楚這兩個概念對於理解logical reads,physical read s至關重要。

consistent read get:從buffer cache 中一致性讀取(consistent read)的block 的數量。

db block get :從buffer cache 中讀取的current  mode 的block 的數量。


為了更好的理解這兩個概念我們得先來說說buffer cache 的模式。

        current mode :current mode get 也叫做 db block get,從buffer cache 中檢索出來的資料塊的資料是當前模式的。

對當前模式我們可以透過下面這個列子來理解。比如一個未提交的事務,更新了一個資料塊中的兩條記錄, db block gets就

夠看到這些未提交的記錄(因為讀取的block是當前狀態的)。所以在insert,update,delete 的語句中能夠經常看到

db block gets。


        consistent mode: consistent read gets 讀取的是讀一致性的block,因此如果需要讀取的資料所在的block 已經被修改

過了,那麼將會使用nudo data。比如一個未提交的事務更新了block 中的兩條記錄,另外一個會話請求該block 中的資料,

oracle 將會使用undo data 來提供讀一致性。


所以不能看到更新以後的資料。典型情況下,select 語句只會產生讀一致性。

擴充套件:

        physical read:指定是使用磁碟IO將資料讀入data buffer cache。讀入data buffer cache 中的blocks 將會被

consistent read gets.

所以總的讀取的blocks(logical I/O)等於db block gets + consistent read gets,明白了這一點對於對於理解

buffer cache hit ratio 也很簡單了。

select  1-sum(decode(name,'physical reads',value,0))/

           (sum(decode(name,'db block gets',value,0))+

          sum(decode(name,'consistent gets',value,0))) "Buffer cache hit ratio"

from v$sysstat;

另外對於這個buffer cache hit ratio 不要太在意,因為這和系統當前的工作狀態有關係的。

特別是在OLAP系統中更是不要為這個hit ratio 所迷惑,因為OLAP系統的特性決定了hit ratio 不可能很高。

下面就是一個偽造hit ratio 的例子,命中率中80%提高到了98%。但是並不是說這個hit ratio 不重要關鍵是要明白當前系統

的執行狀態,系統的型別。改變解決問題的角度不是從hit ratio 入手,而是透過做其他方面的工作來提高這個hit ratio

(如果有必要的話).

SQL>  select 1-sum(decode(name,'physical reads',value,0))/

  2   (sum(decode(name,'db block gets',value,0))+

  3   sum(decode(name,'consistent gets',value,0))) "Buffer cache hit ratio"

  4   from v$sysstat;

Buffer cache hit ratio

----------------------

            .804517936

SQL> ed

Wrote file afiedt.buf

  1  declare

  2    dum dual.dummy%type;

  3  begin

  4    for i in 1..1000000 loop

  5      select dummy into dum

  6      from dual;

  7    end loop;

  8* end;

SQL> /

PL/SQL procedure successfully completed.

SQL> select  1-sum(decode(name,'physical reads',value,0))/

  2             (sum(decode(name,'db block gets',value,0))+

  3            sum(decode(name,'consistent gets',value,0))) "Buffer cache hit ratio"

  4  from v$sysstat;

Buffer cache hit ratio

----------------------

            .982396189


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2658616/,如需轉載,請註明出處,否則將追究法律責任。

相關文章