CKPT

CKPT(Checkpoint)主要負責更新資料庫的最新狀態,對象是資料檔和控制檔,實際上,它的動作很簡單,只是要求資料庫緩衝快取區裡的Dirty Buffer回寫到資料檔而已,因為真正做動作的是DBWRn,當動作完成之後,CKPT就會在控制檔做記錄。
每隔一段固定的時間,DBWRn就會把已修改過的資料庫緩衝快取區裡的Dirty Buffer回寫到資料庫,這個時間點我們稱為Checkpoint,CKPT的功能就是在告知DBWR進行此動作,同時CKPT當Checkpoint完成時,會更新控制檔和資料檔的檔頭,萬一需要instance回復時,也不需要Checkpoint之前的資料,即可縮短啟動的時間。
可能有人會問,DBWR不是有LRU機制嗎?為什麼還要有Checkpoint呢?因為LRU是將最不常使用的資料回寫到資料檔裡,而保留較常使用的資料在資料庫緩衝快取區,以減少I/O;但這會有一個盲點,就是當資料庫損毀時,這些異動的資料將只能從線上重作日誌檔案叫回來,無形中會造成維護上的問題。所以CKPT的功能就是在告知DBWRn進行Checkpoint,但當DBWR要回寫到資料檔之前,會先去做檢查,如果DBWRn發現某些redo entry尚未寫入線上重作日誌檔案,將會通知LGWR前來處理,之後DBWRn才會真正去處理,如此就可以確保資料被妥善儲存了。Checkpoint作業的時機點如下:
  • Redo Log切換
  • 參數設定
    • LOG_CHECKPOINT_TIMEOUT預設30分鐘
    • LOG_CHECKPOINT_INTERVAL(LOG_CHECKPOINT_INTERVAL* OS Bolck的大小 ex, 10,000 * 512k = 5M)
  • ALTER SYSTEM SWITCH LOGFILE;
  • ALTER SYSTEM CHECKPOINT;

沒有留言:

張貼留言