oracle buffer cache管理機制之lruw_dbwr
oracle buffer cache的髒資料塊如何被dbwr寫入到資料檔案中;
髒資料塊如何管理,即用lruw進行管理
何為lruw
1,從8i以後,LRUW連結串列同樣包含兩個子連結串列:輔助LRUW連結串列和主LRUW連結串列。那麼LRUW連結串列是如何產生buffer header的呢
2,把lru buffer cache移動到lruw中
/*****摘錄lruw機制如下****/
我們還是接著上面圖五所示的例子來說明。假設這個時候,前臺使用者發出DML語句,要求修改BH2所指向的記憶體資料塊。這時,按順序發生下面的動作:
1) oracle會將BH2從輔助LRU連結串列上摘下,同時插入主LRU連結串列的中間,也就是插入BH1和BH4中間,同時增加BH2的touch的數量。
2) 將該BH2的標記設定為釘住(ping)。/********更改前先ping住***/
3) 更新BH2對應的記憶體資料塊的內容。
4) 更新完以後,取消釘住的標記。/***更改完取消ping**/
5) 將BH2從主LRU連結串列轉移到主LRUW連結串列上。/***從lru移動到主lruw連結串列***是更新完***/
6) 如果這個時候又有程式發出更新BH2所對應的記憶體資料塊的內容,則BH2再次被釘住,更新,取消釘住。
7) DBWR啟動以後,在掃描主LRUW連結串列時會將BH2轉移到輔助LRUW連結串列上。/***dbwr程式先掃描,不是一上來就寫lruw中的髒資料到data file***,先把主lruw移動到輔助lruw連結串列***/
8) DBWR將輔助LRUW連結串列上的BH2對應的資料塊寫入資料檔案。/**dbwr然後才把lruw輔助連結串列的髒資料寫入到datafile&*****/
9) 確認成功寫入資料檔案以後,將BH2從輔助LRUW連結串列上轉移到輔助LRU連結串列上。/*****確認把髒資料從輔助lruw寫完了,然後把輔助連結串列又移動回原來的輔助lru連結串列上***這樣資料還是在記憶體中***/
從上面的描述中,我們可以看到,
主LRUW連結串列上包含的buffer header要麼是
1,已經更新完了的資料塊,
2,要麼是被釘住正在更新的資料塊。
而當DBWR程式啟動以後,
它會掃描主LRUW連結串列,並跳過正在被釘住更新的buffer header,而將已經更新完了的buffer header從主LRUW連結串列上摘除,並轉移到輔助LRUW連結串列上去。
掃描完主LRUW連結串列,或掃描的buffer header的個數達到一定限度時,DBWR會轉到輔助LRUW上,將上面的buffer header所對應的資料塊寫入資料檔案。
所以說,對於輔助連結串列上的buffer header來說,要麼是正在等待被寫入的;要麼就是已經發出寫入請求,正在寫入而還沒寫完的。這裡要注意的是,
buffer header進入LRUW連結串列,是從尾端進入;而DBWR掃描LRUW連結串列時,則是從首端開始。
順帶提一句,這裡將主LRUW連結串列和輔助LRUW連結串列分開,主要就是為了提高DBWR在主LRUW連結串列上掃描的效率。如果只有主LRUW連結串列而沒有輔助LRUW連結串列的話,
勢必造成三種型別buffer header交織在LRUW連結串列上:
1)正在被釘住更新的buffer header;
2)已經更新完,而正在等待被寫入資料檔案的buffer header;
3)已經發出寫請求,正在寫而尚未寫完的buffer header。在這種情況下,必然造成DBWR為了找到第二種型別的buffer header而需要掃描不該掃描的第三種型別的buffer header。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-757542/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle buffer cache管理機制_buffer cache dump與lru機制小記Oracle
- Linux記憶體管理Swap和Buffer Cache機制Linux記憶體
- 【BUFFER】Oracle buffer cache之 latch 學習記錄Oracle
- buffer cache 內部機制深入探索【一】
- Linux記憶體管理機制中buffer和cache的區別Linux記憶體
- Oracle Buffer Cache原理Oracle
- Oracle database buffer cacheOracleDatabase
- IO之核心buffer----"buffer cache"
- Oracle Cache Buffer ChainsOracleAI
- [Oracle Script] Buffer Cache Hit RatioOracle
- database buffer cache之我見Database
- Oracle Buffer Cache原理總結(一)Oracle
- Oracle Buffer Cache原理總結(二)Oracle
- Oracle中flush buffer cache和x$bhOracle
- Asp.net中cache管理機制介紹ASP.NET
- Buffer Cache 原理
- cache buffer chainAI
- linux下的快取機制及清理buffer/cache/swap的方法梳理Linux快取
- Oracle Library cache內部機制詳解Oracle
- Oracle 11g buffer cache的設定Oracle
- Oracle中Buffer Cache記憶體結構Oracle記憶體
- Linux下的快取機制free及清理buffer/cache/swap的方法梳理Linux快取
- Buffer Cache Hit Ratio
- CACHE BUFFER CHAINSAI
- Database Buffer Cache (79)Database
- oracle實驗記錄 (buffer_cache分析(1))Oracle
- page cache與buffer cache的關係
- 將Buffer Cache內容強制寫出到資料檔案
- zt_Oracle Library cache 內部機制 說明Oracle
- linux cache and buffer【轉】Linux
- Latch: cache buffer chains (%)AI
- BUFFER CACHE尋找流程
- buffer cache logical structure!Struct
- buffer cache部分原理(LRU)
- Organization of the Database Buffer Cache (80)Database
- Size of the Database Buffer Cache (82)Database
- 關於ORACLE裡的buffer cache 的命中率Oracle
- buffer cache 記憶體管理物理結構純乾貨記憶體