oracle檢查點隊列

來源:互聯網
上載者:User

標籤:髒資料   情況   預設   stat   target   png   fas   答案   技術   

主要總結資料庫寫髒塊的機制。

當一個進程要進行修改資料區塊的時候

1、擷取cbc latch

2、修改buffer pin status

3、釋放cbc latch

4、產生redo記錄

5、修改buffer資料區塊

6、將髒塊移到檢查點隊列中,到此才算修改完畢

7、獲得cbc latch

8、修改buffer pin status

9、釋放cbc latch

這裡說明第6步:

 

如,檢查點隊列上有4個塊,他們的順序就是變髒的順序,當6號檔案322號塊被修改時,會在redo產生對應日誌條目,這裡的2.1.322意思是2號redo日誌1號塊的322號位元組。這裡第一條redo日誌記錄6號檔案322號塊第一次改變後映像在redo中的地址,稱為low rda,後面又一次改變的地址被稱為high rba,這裡high rba意義不大,而low rba意義重大。oracle中沒過3s會觸發增量檢查點通知dbwr寫髒塊,具體些多少髒塊由參數fast_start_mttr_target控制。這裡解釋下fast_start_mttr_target,oracle寫髒塊條件是發現髒塊過多,什麼情況下算髒塊過多?假設有3000個髒塊,系統每次io為1ms那麼恢複3000個髒塊就需要3s,而fast_start_mttr_target就是控制執行個體恢復,就是說假如宕機我要在該值的時間內恢複完資料庫,所以該值除每個髒塊寫的時間就是重新整理一次髒塊的數目,通常由oracle根據系統硬體情況自動調整,預設為300s。

 low rba的意義:執行個體恢複。

當資料庫在寫第2個髒塊也就是3號檔案233號塊的時候突然宕機了,buffer中的髒資料都已經沒了,那oracle是怎麼恢複的呢?其實答案就是low rba,在執行個體恢複時候oracle會去檢查檢查點隊列第一個low rba地址位置,由於6號檔案322號塊已經完成寫了(這裡注意下oracle在寫過程中會先把資料庫從檢查點隊列放到obj-q隊列)此時檢查點隊列的第一條記錄是3號檔案的322號塊在redo中的low rda位置,這個記錄就記錄在控制檔案中。其實仔細觀察可以發現,檢查點隊列的順序就是redo記錄中的順序,我們找到檢查點隊列第一條需要恢複的rda位置時候就能根據rda將原來的檢查點隊列恢複出來,有2個小點需要注意,第一,這裡的終點其實就是on disk rda,這條記錄的意思是oracle寫入redo日誌到磁碟的redo位置,如果說redo的rba大於這個值說明還有log buffer未刷到磁碟裡,oracle也不會去恢複它。第二,6號檔案322號塊第二次改變是不需要恢複的,在第一次變成髒塊的時候,資料庫就已經將該塊的值改為了green當恢複遇到該條目的時候,會將green改為green,所以說low rba的重要性遠遠大於high rba。

oracle檢查點隊列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.