Oracle中checkpoint存在的意義

達芬奇的夢發表於2017-05-16

  checkpoint,即檢查點,對於初學者來說其意義也許難以理解,其實我們可以把檢查點看成一個資料庫的事件,要探究這個事件存在的意義,首先有必要研究一下在修改資料庫中的資料時,Oracle做了什麼工作。
     
當我們修改資料庫中的資料時,Oracle首先會把這些修改的資料讀入記憶體database buffer cache中,在修改資料的同時, Oracle會將那些修改的資料順序地寫入到redo log file中,也就是一條一條的redo entry,這些redo資訊是用來進行資料庫恢復的。因為有了redo 的存在,Oracle無需在發出commit的時候急著將修改的資料立刻寫回到磁碟中,這樣的話效率會非常低。redo的存在就是為了在資料庫崩潰之後,資料得以恢復。試想一下如果資料庫在執行的過程中由於斷電crash掉了,那麼那些在記憶體中修改過的資料,並且還沒來得及寫入到檔案中的資料就會丟失。在下次資料庫啟動的時候就要進行恢復了。首先,Oracle會透過redo log file中記錄的資訊進行事務重演,即前滾,這時候資料庫中包含了提交的資料和沒有提交的資料,完成了前滾之後,資料庫就會開啟以供使用者使用,然後Oracle就會進行回滾,也就是把資料庫中沒有提交的資料回滾掉,這樣資料庫中就只剩下那些提交了的資料。當然,資料庫恢復的時間越短越好,這樣資料庫就可以儘快地正常使用。那麼是什麼決定了資料庫恢復的時間呢?答案就是檢查點發生的頻率。
     
當檢查點發生的時候,Oracle就會通知後臺程式DBWRdatabase buffer cache中修改過的資料,即dirty buffer寫入到磁碟中,寫完之後,CKPT會更新資料檔案頭和控制檔案,記錄checkpoint資訊,標識變更。有了檢查點事件,當資料庫進行恢復的時候,redo log file中檢查點之前的事務就不用被應用到了,因為它們已經被寫到磁碟中了,這樣可以縮短資料庫恢復的時間。
     
所以,檢查點存在的意義很簡單,就是縮短崩潰恢復的時間。

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

相關文章