複製鏈接
請複製以下鏈接發送給好友

CheckPoint

鎖定
checkpoint是一個內部事件,這個事件激活以後會觸發數據庫寫進程(DBWR)將數據緩衝(DATABUFFER CACHE)中的髒數據塊寫出到數據文件中。
中文名
內部事件
外文名
CheckPoint
作    用
保證數據庫的一致性
突發事件
日誌切換

CheckPoint概念

數據庫系統中,寫日誌和寫數據文件是數據庫中IO消耗最大的兩種操作,在這兩種操作中寫數據文件屬於分散寫,寫日誌文件是順序寫,因此為了保證數據庫的性能,通常數據庫都是保證在提交(commit)完成之前要先保證日誌都被寫入到日誌文件中,而髒數據塊則保存在數據緩存(buffer cache)中再不定期的分批寫入到數據文件中。也就是説日誌寫入和提交操作是同步的,而數據寫入和提交操作是不同步的。這樣就存在一個問題,當一個數據庫崩潰的時候並不能保證緩存裏面的髒數據全部寫入到數據文件中,這樣在實例啓動的時候就要使用日誌文件進行恢復操作,將數據庫恢復到崩潰之前的狀態,保證數據的一致性。檢查點是這個過程中的重要機制,通過它來確定,恢復時哪些重做日誌應該被掃描並應用於恢復。
一般所説的checkpoint是一個數據庫事件(event),checkpoint事件由checkpoint進程(LGWR/CKPT進程)發出,當checkpoint事件發生時DBWR會將髒塊寫入到磁盤中,同時數據文件和控制文件的文件頭也會被更新以記錄checkpoint信息。

CheckPoint作用

checkpoint主要2個作用:
保證數據庫的一致性,這是指將髒數據寫入到硬盤,保證內存和硬盤上的數據是一樣的;
縮短實例恢復的時間,實例恢復要把實例異常關閉前沒有寫出到硬盤的髒數據通過日誌進行恢復。如果髒塊過多,實例恢復的時間也會很長,檢查點的發生可以減少髒塊的數量,從而提高實例恢復的時間。
通俗的説checkpoint就像word的自動保存一樣。
檢查點分類
完全檢查點(Normal checkpoint)
增量檢查點(Incremental checkpoint)
checkpoint相關概念術語
在説明checkpoint工作原理之前我們先了解一些相關的術語。
完全檢查點工作過程

CheckPoint不同階段

第一階段,checkpoint進程開始一個checkpoint事件,並記錄下checkpoint RBA,這個通常是當前的RBA。
第二階段,checkpoint進程通知DBWn進程將所有checkpoint RBA之前的buffer cache裏面的髒塊寫入磁盤。
確定髒塊都被寫入磁盤以後進入到第三階段,checkpoint進程將checkpoint信息(SCN)寫入/更新數據文件和控制文件中。
更新SCN的操作由CKPT進程完成,在Oracle 8.0之後CKPT進程默認是被啓用的,如果CKPT進程沒有啓用的話那相應的操作將由LGWR進程完成。

CheckPoint發生時間

下面這些操作將會觸發checkpoint事件:
日誌切換,通過ALTER SYSTEM SWITCH LOGFILE。
DBA發出checkpoint命令,通過ALTER SYSTEM checkpoint。
對數據文件進行熱備時,針對該數據文件的checkpoint也會進行,ALTER TABLESPACE TS_NAME BEGIN BACKUP/END BACKUP。
當運行ALTER TABLESPACE/DATAFILE READ ONLY的時候。
SHUTDOWN命令發出時。

CheckPoint特別注意

日誌切換會導致checkpoint事件發生,但是checkpoint發生卻不會導致日誌切換。
日誌切換觸發的是normal checkpoint,而不是大家所説的增量checkpoint,只不過log switch checkpoint的優先級非常低,當一個log switch checkpoint發生的時候它並不會立即的通知DBWn進程去寫數據文件,但是當有其它原因導致checkpoint或者是寫入數據文件的RBA超過log switch checkpoint的checkpoint RBA的時候,這次的log switch checkpoint將會被標記成完成狀態,同時更新控制文件和數據文件頭。我們隨後可以做個實驗驗證這個説法。
OracleSCN相當於它的時鐘,在現實生活中我們用時鐘來記錄和衡量我們的時間,而Oracle就是用SCN來記錄和衡量整個Oracle系統的更改。
Oracle中checkpoint是在一個特定的“時間點”發生的,衡量這個“時間點”用的就是SCN,因此當一個checkpoint發生時SCN會被寫入文件頭中以記錄這個checkpoint。

CheckPoint增量

增量checkpoint工作過程
因為每次完全的checkpoint都需要把buffer cache所有的髒塊都寫入到數據文件中,這樣就是產生一個很大的IO消耗,頻繁的完全checkpoint操作很對系統的性能有很大的影響,為此Oracle引入的增量checkpoint的概念,buffer cache中的髒塊將會按照BCQ隊列的順序持續不斷的被寫入到磁盤當中,同時CKPT進程將會每3秒中檢查DBWn的寫入進度並將相應的RBA信息記錄到控制文件中。
有了增量checkpoint之後在進行實例恢復的時候就不需要再從崩潰前的那個完全checkpoint開始應用重做日誌了,只需要從控制文件中記錄的RBA開始進行恢復操作,這樣能節省恢復的時間。
發生增量checkpoint的先決條件
恢復需求設定 (FAST_START_IO_TARGET/FAST_START_MTTR_TARGET)
LOG_checkpoint_INTERVAL參數值
LOG_checkpoint_TIMEOUT參數值
最小的日誌文件大小
buffer cache中的髒塊的數量
增量checkpoint的特點
增量checkpoint是一個持續活動的checkpoint。
沒有checkpoint RBA,因為這個checkpoint是一直都在進行的,所以不存在normal checkpoint裏面涉及的checkpoint RBA的概念。
checkpoint advanced in memory only
增量checkpoint所完成的RBA信息被記錄在控制文件中。
增量checkpoint可以減少實例恢復時間。
增量checkpoint相關參數設置
log_checkpoint_interval
設定兩次checkpoint之間重做日誌塊(重做日誌塊和系統數據塊是一樣的)數,當重做日誌塊數量達到設定值的時候將觸發checkpoint。
log_checkpoint_timeout
設定兩次checkpoint之間的間隔時間,當超時值達到時增量checkpoint將被觸發。Oracle建議不用這個參數來控制,因為事務(transaction)大小不是按時間等量分佈的。將此值設置成0時將禁用此項設置。
fast_start_io_target
因為log_checkpoint_interval主要看的時候重做日誌塊的數量,並不能反應buffer cache中髒數據塊的修改,因此Oracle又引入了這個參數來實現當髒數據塊達到一定數量的時候觸發checkpoint,不過此參數實際上控制的是恢復時所需IO的數量。
fast_start_mttr_target
此參數是在9i中引入用來代替前面的三個參數的,它定義了數據塊崩潰後所需要的實例恢復的時間,Oracle在實際上內在的解釋成兩個參數:fast_start_io_target和log_checkpoint_interval.如果這兩個參數沒有顯式的指定,計算值將生效.。
fast_start_mttr_target可以設定的最大值是3600,即一個小時。它的最小值沒有設限,但是並不是説可以設置一個任意小的值,這個值會受最小dirty buffer(最小為1000)的限制,同時還會受初始化時間以及文件打開時間的限制。
在設置此參數的時候要綜合考慮系統的IO,容量以及CPU等信息,要在系統性能和故障恢復時間之間做好平衡。
將此參數設置成0時將禁用 fast-start checkpointing,這樣能見效系統負載但同時會增加系統的恢復時間。
如果fast_start_io_target or log_checkpoint_interval被指定,他們會自動覆蓋由fast_start_mttr_target參數計算出來的值。

CheckPoint主要功能

Check Point 12610設備基於其軟件刀片架構。這意味着用户可以選擇其需要的特定功能的許可。其主要功能有:防火牆、IPsecVPN、高級網絡和集羣、身份識別、移動接入、入侵防禦系統(IPS)、應用程序管理、URL過濾、反病毒程序、郵件安全。 [1] 
參考資料