ORACLE buffer cache 原理 --檢查點佇列連結串列(參照學習:oracle核心技術揭秘)
CKPT-Q 和 LRU
在update過程中,首先在前文所講的CBC Latch的保護下修改資料,之後程式先持有 checkpoint queue latch,然後將5號檔案中的1234號塊加入到檢查點佇列(CKPT-Q),當然還有產生對應的redo資料。再次update時 會在產生一個新的redo資料,並不會影響CKPT-Q,所以只有在不髒變髒的過程中才需要持有 checkpoint queue latch。最後一次redo的地址為high RBA,第一次是的 是 low rba ,LRBA的作用是巨大的,檢查點佇列中髒塊的順序就是 LRBA的順序。DBWR會按照CKPT-Q 順序寫髒塊。首先掃描checkpoint queue latch 然後確定要寫的髒塊後,將其移到OBJ-Q中,移動完畢,馬上釋放checkpoint queue latch。
例項恢復時是從檢查點佇列的LRBA處開始恢復的。檢查點佇列頭又稱為檢查點位置,CKPT程式會每隔3秒將檢查點位置對應的的LRBA記錄到控制檔案中。
redo資訊包括: 所屬的檔案號 對應的塊號 被修改的行號 列號 還有後映像。
DBWR發現佇列中的髒塊較多,才開始寫入磁碟。影響其寫入的因素有一下幾個:
1>fast_start_mttr_target,表示使用者期望的恢復時間。對應多少個髒塊的恢復時間可以估算需要刷髒塊的比例。10g後 自調節檢查點是預設開啟的。
2>IO合併緩衝區,是為了將相鄰的髒塊合併為一個IO一次性寫入而設定的一個專門的緩衝區。髒塊太多的時候 ,可以將髒塊分成多個batch 分批合併。開始寫構成一個batch的髒塊前,一個batch會記錄db file parallel write等待事件,直至這一個batch所有操作都完成,事件才結束。
檢查點佇列與例項恢復相關:
1.塊被修改時會產生redo log
2.塊由不髒變髒會寫入檢查點佇列
3.檢查點佇列中的排列順序和redo log記錄基本一致
4.DBWR每3秒檢查一次檢查點佇列長度,過長,則會觸發寫髒塊
5.DBWR會沿著檢查點佇列順序寫髒塊
6.CKPT每3秒一次,將檢查點佇列頭對應的LRBA寫進控制檔案
7.如果資料庫崩潰,需要恢復,起點就是控制檔案中的檢查點佇列頭對應的LRBA
8.開始恢復時候,Oracle找到LRBA再定位到redo 檔案的某個位置,開始依次進行例項恢復。
LRBA : low redo block address 對應的還有HRBA
寫髒塊之前,Oracle會有一個合併的動作,在共享池中有一個IO合併快取區就是用作這個的,主要是合併IO
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30018455/viewspace-2124239/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE buffer cache 原理 --LRU連結串列(參照學習:oracle核心技術揭秘)Oracle
- ORACLE buffer cache 原理 --hash連結串列(參照學習:oracle核心技術揭秘)Oracle
- Oracle 檢查點佇列與增量檢查點Oracle佇列
- Oracle Buffer Cache原理總結(一)Oracle
- Oracle Buffer Cache原理總結(二)Oracle
- Oracle Buffer Cache原理Oracle
- 陣列、連結串列、堆疊和佇列學習陣列佇列
- 【BUFFER】Oracle buffer cache之 latch 學習記錄Oracle
- 連結串列&鏈棧&佇列佇列
- 佇列_單向連結串列佇列
- 連結串列、棧、佇列、KMP相關知識點佇列KMP
- 約瑟夫環 佇列+連結串列佇列
- Oracle database buffer cacheOracleDatabase
- 鏈式佇列—用連結串列來實現佇列佇列
- 聊聊陣列與連結串列,棧與佇列陣列佇列
- Oracle中Buffer Cache記憶體結構Oracle記憶體
- Oracle Cache Buffer ChainsOracleAI
- 用連結串列實現佇列的功能佇列
- Oracle OTN 技術文章連結Oracle
- 【TUNE_ORACLE】Oracle檢查點(二)檢查點效能Oracle
- Buffer Cache 原理
- [Oracle Script] Buffer Cache Hit RatioOracle
- 29_檢查點佇列(checkpoint queue)佇列
- 連結串列學習(6)
- 單連結串列學習
- 線性表(陣列、連結串列、佇列、棧)詳細總結陣列佇列
- IO之核心buffer----"buffer cache"
- OCP知識點講解 之 檢查點佇列與增量檢查點佇列
- oracle checkpoint檢查點Oracle
- 複習下C 連結串列操作(雙向迴圈連結串列,查詢迴圈節點)
- 連結串列面試題(四)---查詢連結串列的中間節點面試題
- 【TUNE_ORACLE】Oracle檢查點(一)檢查點(Checkpoint)概念介紹Oracle
- 自定義單連結串列佇列的基本介面函式(非迴圈佇列)佇列函式
- data buffer cache的一點總結。
- 單連結串列學習(一)
- oracle buffer cache管理機制_buffer cache dump與lru機制小記Oracle
- 常見的線性列表結構---【陣列、連結串列、棧、佇列、堆】陣列佇列
- buffer cache部分原理(LRU)