oracle dbblock gets

一個 db block gets是一個current mode get.這是現在或者最近的數據塊中最新的copy

buffer cache中任何時候只能有一個blockcopy Db block gets是發生通常是:DML改變database中的數據的時候。在這種情況下row-level的鎖會隱式的加載在正在被更新的rows上。

select語句執行一個db block gets的時候,最少有一個well-knowncase,,而且不會產生lock

當執行一次全表掃描或者全索引掃描的時候,oracle會讀取segmentheader current mode(多次讀取,取決於oracle版本)。



Current mode

Oracle獲得block用兩種方式:current或者consistent




Consistent get是當oracle得到一個block(一致性的block,有一個給予的時間點或者SCN

一致性得到是oracle一致性讀機制的核心。爲了完成查詢結果,block會被拿出來,它們被取出來在一致性模式上。如果在buffer cache中的block和正確的point不一致的話,oracle會使用rollback sgement中的信息重建block。如果失敗的話,這就是會產生錯誤。

(爲什麼buffer  cache中的block和正確的point不一致?)







Current mode 是相對於query mode來說的,current mode產生db block gets,一般是在DML的時候產生

Query mode 產生 consistent gets,一般在查詢的時候產生,,總和一般稱爲邏輯讀,logicalread




Current mode是當前讀到的是什麼數據就是什麼數據,

一致性模式是:從開始到結束讀到的數據都是同一個時間點內



Select is query mode

And DML like insertupdate delete is consistent mode








Oracle 讀一致性

Consistent  read:如何實現:



Oracle邏輯讀:是從內存,確切的說是從:SGA中的buffer cache中取出東西來

Logical read,又分爲:db block gets ,consistentgets


Db block gets DML執行的時候,在內存中讀取的東西,還涉及到oracleundo segment


consistent gets是,select執行的時候,因爲不會產生數據變化,所以說是直接從oraclebuffer cache 中取出東西來就OK




What the fuck is going on?

What the hell is going on?


Where is the truth?



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章