Buffer Cache結構及LRU, LRBA , Checkpoint Queue[final]

tolywang發表於2010-11-11



Buffer Cache結構:

連結串列為 Hash Chain  "--&gt" 

Buffer header裡面記錄的指標就指向buffer cache中的該資料塊本身


[hash bucket 0] --&gt [buffer header] --&gt [buffer header] --&gt [buffer header]  ...

[hash bucket 1] --&gt [buffer header] ...

[hash bucket 2] --&gt [buffer header] --&gt [buffer header] ...

[hash bucket 3] --&gt [buffer header]

[hash bucket 4] --&gt [buffer header] --&gt [buffer header] 

[hash bucket 5] --&gt [buffer header] --&gt [buffer header] --&gt [buffer header]  ...

... 

 

LRU:  Least Recently Used,也就是指最近最少使用的buffer header連結串列。LRU連結串列串聯起來的buffer header都指向可用資料塊。buffer按照被使用的先後順序掛在LRU連結串列上,先被使用的buffer掛在LRU連結串列的後面,後被使用的buffer則被掛在LRU連結串列的前面。如果buffer被DML語句修改了,則該buffer會從LRU連結串列上摘下來。換句話說,LRU連結串列上的buffer header所指向的buffer都是可用資料塊。

 


檢查點佇列 (Checkpoint Queue,Dirty List) --

該佇列上串起來的都是髒資料塊所對應的buffer header。而每次DBWn寫髒資料塊時,也是從檢查點佇列上掃描髒資料塊,並將這些髒資料塊實際寫入資料檔案的。當寫完以後,DBWn會將這些已經寫入資料檔案的髒資料塊從檢查點佇列上摘下來。

檢查點佇列上的buffer header是按照資料塊第一次被修改的時間的先後順序來排列的。越早修改的資料塊的buffer header排在越前面,同時如果一個資料塊被修改了多次的話,在該連結串列上也只出現一次。buffer header還記錄了髒資料塊在第一次被修改時,所對應的重做條目在重做日誌檔案中的地址,也就是LRBA (Low Redo Block Address).

[buffer header0]->[buffer header2]->[buffer header3]->[buffer header4]->....

 


LRBA --

Redo log file中的LRBA (Low Redo Block Address) 表示髒資料塊第一次被修改時候所對應的重做條目在重做日誌檔案中的地址 (Low表示第一次修改)

[LRBA0][LRBA1][LRBA2][LRBA3][LRBA4][LRBA5][LRBA6]

 

檢查點位置(Checkpoint Position) --  

表示出現系統崩潰後日志檔案中的重做條目恢復起點

當前檢查點佇列上的第一個buffer header,該buffer header中所記錄的LRBA 就是checkpoint position,  該檢查點位置記錄在控制檔案裡

 

DBWn負責寫檢查點佇列上的髒資料塊,而CKPT負責記錄當前檢查點佇列的第一個資料塊所對應的的重做條目在日誌檔案中的地址。而到底應該寫哪些髒資料塊,寫多少髒資料塊,則要到檢查點佇列上才能確定的。

 

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

相關文章