cr塊和latch buffer cache chain

dotaddjj發表於2011-10-10

Cr塊和latch buffer cache chain

Crconsistent read 塊也就是用來維護oracle的讀一致性的資料塊。當查詢某些資料的時候,發現資料塊的版本比我們要查詢的新,例如session1執行了dml操作並沒有提交,session2此時查詢跟session1相關的dml操作的資料資訊,此時查詢的資料卻是原來的資料資訊。

查詢的過程會在undo段中查詢該資料塊的前映像後,然後把前映像和current塊合併形成了一個CR block,透過查詢cr block就可以滿足資料的一致性了。

CR block存在與sgabuffer cache中,在db cache裡申請一個資料塊,然後對應的回滾段的前映像生成cr block

cr塊的數量是由隱含引數_db_block_max_cr_dba控制的,預設是最高同時存在5個cr塊,構造cr塊時cr block created計數器都會增加1.

由於cr blockcurrent block的資料塊的rdba都是相同的,會放在相同的hash鏈上,當然某些blockcr block的版本過多,自然會引起hash鏈上的競爭,導致latch buffer cache chain閂競爭。

當然在利用回滾段的前映像和current block構造cr 塊時,很有可能回滾段的已經被覆蓋,也就會出現常見的ora-01555快照過舊。

一個sql語句如何去查詢資料資訊了,根據以前的latch基本記載知道獲取該資料塊的latch然後才能對該資料塊進行讀取,其實一個sql訪問資料資訊的資料塊,需要像連結一樣的結構中去收索這個資料塊是否在記憶體中,此時訪問連結串列也需要一個latch,如果獲取失敗也就是會產生latch buffer cache chain等待了。

Latch buffer cache chain等待:

訪問相同的資料塊的session太多了導致了latch等待,也可能是由於此hash列表的增長,導致掃描hash列表的時間會增加,持有cache buffer chain latch的時間就會變長,其他session獲得latch的時間就會增加,導致了latch buffer cache chain

幾個細節:

Cr塊不會寫入回滾表空間所在的資料檔案

cr塊是從undo表空間中來的,就會存在一個物理讀

讀一個塊可能會或不會需要cr

[@more@]

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

相關文章