db block gets的解釋[轉]

zhouxianwang發表於2012-07-17

LOGIC IO(邏輯讀次數)= db block gets + consistent gets

 

consistent get : 在一致讀模式下所讀的快數,包括從回滾段讀的快數。 
db block gets : 在當前讀模式下所讀的快數,比較少和特殊,例如資料字典資料獲取,在DML中,更改或刪除資料是要用到當前讀模式。

 

consistent gets : 透過不帶for update的select 讀的次數
db block gets : 透過update/delete/select for update讀的次數.

 

consistent gets :consistent_gets是從回滾段中讀到的前映(或叫讀取一致性影像), 看見的資料是查詢開始的時間點的,所以若存在block在查詢開始後發生了變化的情況,則必須產生 before image 然後讀資料,這就是一致讀的含義
查詢就是表示 consistent gets (query mode),因為查詢要保證所獲取的資料的時間點的一致性,所以叫一致讀,即使是從當前 buffer 獲得的資料,也叫 consistent gets ,這僅僅表達一種模式一種期望,並不表示真實的是從 當前buffer 獲得 還是從回滾段獲取資料產生的 bufore image 。

 

db block gets : current mode , 不管這個塊上的資料是否可能存在 before image ,也就是說不管是否存在回滾中資料可以 回滾,只看見當前最新塊的資料,即使別人正在更新,也看見別人更新狀態的資料,比如dml的時候就不需要看見別人更改前的資料,而是看見正在更改的,當然同時,若操作相同資料則被lock住。也就是說一次查詢中看見的資料可能不在同一個時間點上,比如一個大的dml,當dml 開始更新一個非常大的表後,這個表更新的過程中,有一個程式去把該表末尾的一個記錄更新了,然後這個大更新抵達該記錄的時候會被阻塞的,若該程式事物提交,則大更新會覆蓋該事務的更新,也就是說,這個大更新所看見的資料是當前的,不具有時間點的一致性,所以叫 current mode,個人認為db block gets這個詞用的不好, 容易讓人誤解. 如果改成inconsistent gets可能會更準確一些
 

consistent gets
db block gets + consistent gets = logical io (as opposed to physical io). consistent gets are current mode gets. This might entail a reconstruction of the block with the undo (rollback) mechanism.

Number of times a consistent read was requested for a block.

 

db block gets
db block gets + consistent gets = logical io (as opposed to physical io). db block gets are current mode gets, blocks that are read as they are (even if these are being modified by another session)

Number of times a CURRENT block was requested.

 

 

記一下,以前也總是繞來繞去,糾纏解釋不清的。

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

相關文章