天天看點

checkpoint 詳解 (三)

檢視系統的checkpoint動作

我們可以通過将LOG_checkpointS_TO_ALERT設定成TRUE來打開checkpoint的trace,這樣就可以跟蹤checkpoint的操作了。

ALTER SYSTEM SET LOG_checkpointS_TO_ALERT=TRUE;

這設定以後系統的checkpoint将會被記錄alert_$SID.log檔案中。

在V$DATAFILE_HEADER裡面也儲存了發生完全checkpoint的時候一些相關資訊,包括checkpoint發生時間、對應SCN已經checkpoint的次數。

select file# NO, status, tablespace_name, name, dbms_flashback.get_system_change_number CUR_SCN,

to_char(resetlogs_time, 'YYYY-MM-DD HH24:MI:SS')RST_DT, resetlogs_change# RST_SCN,

to_char(checkpoint_time, 'YYYY-MM-DD HH24:MI:SS')CKPT_DT, checkpoint_change# CKPT_SCN, checkpoint_count CKPT_CNT

from v$datafile_header;

完全檢查點

--我們先執行一個

ALTER SYSTEM checkpoint;

--下面是alert檔案中的資料結果

Mon Aug 4 22:22:082008

Beginning global checkpoint up to RBA [0x8.c9d4.10], SCN: 533714

Completed checkpoint up to RBA [0x8.c9d4.10], SCN: 533714

--我們能看到完全checkpoint發生的SCN 533714

--下面我們再對照下V$DATAFILE_HEADER中的結果

NO STATUS TABLESPACE_NAME CUR_SCN RST_DT RST_SCN CKPT_DT CKPT_SCN CKPT_CNT

--- ------- ---------------- -------- ------------------- -------- ------------------- --------- ---------

1 ONLINE SYSTEM 533790 2008-01-12 16:51:53 446075 2008-08-04 22:22:08 533714 66

2 ONLINE UNDOTBS1 533790 2008-01-12 16:51:53 446075 2008-08-04 22:22:08 533714 29

3 ONLINE SYSAUX 533790 2008-01-12 16:51:53 446075 2008-08-04 22:22:08 533714 66

4 ONLINE USERS 533790 2008-01-12 16:51:53 446075 2008-08-04 22:22:08 533714 65

5 ONLINE EXAMPLE 533790 2008-01-12 16:51:53 446075 2008-08-04 22:22:08 533714 25

--看到了麼,checkpoint時間和checkpoint的SCN已經被記錄到資料檔案頭中了。

日志切換時的檢查點

--我們先做一次日志切換

ALTER SYSTEM SWITCH LOGFILE;

--然後看看alert裡面的記錄

Mon Aug 4 22:31:39 2008

Beginning log switch checkpoint up to RBA [0x9.2.10], SCN: 534450

Thread 1 advanced to log sequence 9

Current log# 2 seq# 9 mem# 0: /u/app/oracle/oradata/orcl/redo02.log

Mon Aug 4 22:35:58 2008

Completed checkpoint up to RBA [0x9.2.10], SCN: 534450

--我們能看到checkpoint是在過了一段時間(這裡是4分鐘)之後才完成的

--接着我們來看下V$DATAFILE_HEADER中的結果

NO STATUS TABLESPACE_NAME CUR_SCN RST_DT RST_SCN CKPT_DT CKPT_SCN CKPT_CNT

--- ------- ---------------- -------- ------------------- -------- ------------------- --------- ---------

1 ONLINE SYSTEM 534770 2008-01-12 16:51:53 446075 2008-08-04 22:31:44 534450 67

2 ONLINE UNDOTBS1 534770 2008-01-12 16:51:53 446075 2008-08-04 22:31:44 534450 30

3 ONLINE SYSAUX 534770 2008-01-12 16:51:53 446075 2008-08-04 22:31:44 534450 67

4 ONLINE USERS 534770 2008-01-12 16:51:53 446075 2008-08-04 22:31:44 534450 66

5 ONLINE EXAMPLE 534770 2008-01-12 16:51:53 446075 2008-08-04 22:31:44 534450 26

--在這裡我們能發現下V$DATAFILE_HEADER裡面記錄的SCN和日志切換發生的checkpoint的SCN是一樣的,

--這就證明了日志切換是會更新資料檔案頭的,同時日志切換的checkpoint是一個級别比較低的操作,

--它不會立即完成,這也是出于性能上考慮的。

增量checkpoint檢視

這段話明天再實驗下目前所知隻有在LOG_checkpoint_TIMEOUT設定了非0值之後觸發的增量checkpoint會在alert檔案中有記錄,其他條件觸發的增量checkpoint都不會記錄在alert檔案中。

--下面是當LOG_checkpoint_TIMEOUT設定為1800s的時候所産生的增量checkpoint記錄

Sun Aug 3 19:08:56 2008

Incremental checkpoint up to RBA [0x8.e17.0], current log tail at RBA [0x8.1056.0]

Sun Aug 3 19:39:00 2008

Incremental checkpoint up to RBA [0x8.1be0.0], current log tail at RBA [0x8.1c6e.0]

Sun Aug 3 20:09:04 2008

Incremental checkpoint up to RBA [0x8.2af5.0], current log tail at RBA [0x8.2b6a.0]

Sun Aug 3 20:39:07 2008

Incremental checkpoint up to RBA [0x8.3798.0], current log tail at RBA [0x8.3851.0]

Sun Aug 3 21:09:10 2008

Incremental checkpoint up to RBA [0x8.47b9.0], current log tail at RBA [0x8.48bb.0]

Sun Aug 3 21:39:14 2008

Incremental checkpoint up to RBA [0x8.548d.0], current log tail at RBA [0x8.5522.0]

Mon Aug 4 21:05:18 2008

檢視fast_start_mttr_target

通過檢視V$INSTANCE_RECOVERY動态性能視圖可以檢視一些MTTR相關的資訊。

SELECT TARGET_MTTR,ESTIMATED_MTTR,CKPT_BLOCK_WRITES,CKPT_BLOCK_WRITES FROM V$INSTANCE_RECOVERY

TARGET_MTTR

使用者設定的參數FAST_START_MTTR_TARGET的值.

ESTIMATED_MTTR

根據目前髒塊數目和日志塊數目,評估的現在進行恢複所需要的時間.

CKPT_BLOCK_WRITES

檢查點寫完的塊數目.

CKPT_BLOCK_WRITES

額外的因為檢查點引起的資料庫寫入操作(因為不必要的檢查點的産生,設定一個非常小的系統恢複時間将會對性能産生負面影響,為了幫助管理者監測這個參數設定較小時對資料庫的影響,這個視圖顯示了這個列)