天天看點

db block gets的解釋

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.

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