CKPTQ:Checkpoint Queue(檢查點隊列)檢查點隊列中的數據塊記錄着每一個數據塊的LRBA地址數據庫
RBA :Redo Block Address(重作日誌塊的地址,至關於數據文件中的rowid,能夠經過該地址定位重作日誌塊)緩存
由三個部分組成:4byte+4byte+2byteide
logfile sequence number(日誌文件序列號)性能
logfile block number(日誌文件塊編號)spa
byte offset into the block(重作日誌記錄在日誌塊中的起始偏移字節數)日誌
LRBA :Low cache RBA(buffer cache中髒塊第一次變髒的時候產生重作日誌記錄在redo log file中對應的地址,即當前檢查點隊列的位置)orm
HRBA :High cache RBA(buffer cache中髒塊最近一次變髒的時候產生重作日誌記錄在redo log file中對應的地址)隊列
on disk RBA:redo log file中狀態爲CURRENT的最後一條日誌地址進程
在數據庫系統中,寫日誌和寫數據文件是數據庫中IO消耗最大的兩種操做,在這兩種操做中寫數據文件屬於分散寫,寫日誌文件是順序寫,所以爲了保證數據庫的性能,一般數據庫都是保證在提交(commit)完成以前要先保證日誌都被寫入到日誌文件中,而髒數據塊則保存在buffer cache中再不按期的分批寫入到數據文件中。也就是說日誌寫入和提交操做是同步的,而數據寫入和提交操做是不一樣步的。這樣就存在一個問題,當一個數據庫崩潰的時候並不能保證緩存裏面的髒數據所有寫入到數據文件中,這樣在實例啓動的時候就要使用日誌文件進行恢復操做,將數據庫恢復到崩潰以前的狀態,以保證數據的一致性。檢查點就是這個過程當中的重要機制,經過它來肯定,恢復時哪些重作日誌應該被掃描並應用於恢復。事件
通常所說的checkpoint是一個數據庫事件(event),checkpoint事件由checkpoint進程(LGWR/CKPT進程)發出,當checkpoint事件發生時DBWn會將髒塊寫入到磁盤中,同時數據文件和控制文件的文件頭也會被更新以記錄checkpoint信息。
Checkpoint的主要做用:
保證數據庫的一致性。
這是指將髒數據寫入到硬盤,保證內存和磁盤上的數據是同樣的;
縮短實例恢復的時間。
實例恢復須要把實例異常關閉前沒有寫入到磁盤的髒數據經過日誌進行恢復,若是髒塊過多,實例恢復的時間也會很長,檢查點的發生能夠減小髒塊的數量,從而提升實例恢復的時間。
若是初始化參數LOG_CHECKPOINTS_TO_ALERT設置爲TRUE,則有關每一個檢查點的信息都記錄在alert_$ORACLE_SID.log 文件內。該參數缺省值爲FALSE,表示不記錄檢查點。
在Oracle裏面,檢查點分爲三種:徹底檢查點、增量檢查點、部分(臨時)檢查點
徹底檢查點
在Oracle8i以前,數據庫的發生的檢查點都是徹底檢查點。
徹底檢查點會觸發DBWn將buffer cache裏面全部的髒數據塊寫入相應的數據文件中(即便事務未提交),而且同步數據文件頭和控制文件中的信息,保證數據庫的一致性。
徹底檢查點在8i以後只有在下列兩種狀況下才會發生:
數據庫正常shutdown(immediate,transcational,normal)
DBA手工命令干預(alter system checkpoint)
增量檢查點
增量檢查點並不更新控制文件中系統SCN、文件SCN、結束SCN以及數據文件頭部的開始SCN,而是每隔3秒由CKPT進程將檢查點隊列中第一個髒塊所對應的LRBA地址(即檢查點的位置,前滾起點)記錄到控制文件中.
但若是是由日誌切換所引發的增量檢查點,則同時還會將LRBA地址記錄到每一個數據文件頭中
引發增量檢查點的條件有:
fast_start_mttr_target參數(mttr:Mean Time To Recovery 快速啓動平均故障恢復時間)
該參數控制數據庫對單個實例執行崩潰恢復所花費的時間量(以秒爲單位,默認爲0,最大值爲3600)。
啓用快速啓動檢查點功能時,Oracle將自動根據工做負載狀況計算增量檢查點的頻率(間接影響DBWn進程的頻率),以便達到請求的MTTR。若是將該值設置爲0, 將禁用此功能。(但工做負載檢查沒法關閉)
log_checkpoint_timeout參數用於表示檢查點位置和重作日誌文件末尾之間的時間間隔,以秒爲單位,默認狀況下是1800秒。
fast_start_io_target參數用於表示數據庫發生Instance Recovery的時候須要產生的IO總數,它經過v$filestat的AVGIOTIM來估算的。(9i之後已經廢棄)
SQL> alter system set fast_start_mttr_target=90;
System altered.
SQL> show parameter fast_start_mttr_target
NAME TYPE VALUE
------------------------------------ ----------- ---------
fast_start_mttr_target integer 90
日誌切換
SQL> alter system switch logfile;
System altered.
部分檢查點
觸發DBWn進程將buffer cache中相關的數據髒塊都會寫入相應的數據文件
引發部分檢查點的條件有:
表空間下線/只讀
SQL> ALTER TABLESPACE tablespace_name OFFLINE;
SQL> ALTER TABLESPACE tablespace_name READ ONLY;
熱備份(熱備份表空間的時候,爲了不redo log被覆蓋,數據庫必須運行在歸檔模式下)
SQL> ALTER TABLESPACE tablespace_name BIGEN BACKUP; //進入熱備份狀態(鎖住數據文件頭,並記錄塊變化日誌)
SQL> ! cp
SQL> ALTER TABLESPACE tablespace_name END backup; //退出熱備份(解鎖數據文件頭)