收藏What’s the Point of Oracle Checkpoints?

yyp2009發表於2011-05-24

(oracle checkpoint相關的一些重要問題)

作者簡介: Harald van Breederode (oracle大學高階DBA講師,擁有25unix方面的經驗和12oracle相關經驗。Oracle 8i,9i,10g,11g ocpOracle 10g ocm)

 

原文是一個英文的PDF(PPT),同事推薦的,PDF內容比較粗。第一次翻譯,有不正確的地方歡迎指正。原文下載

1.目錄

1.       介紹。

2.       緩衝區(Buffer cache)基礎知識。

3.       Redo和緩衝區的關係。

4.       什麼是檢查點(checkpoint)。

5.       檢查點的種類。

6.       Oracle在什麼情況下會進行檢查點(checkpoint)。

7.       調整線上日誌檔案。

8.       總結。

 

2 .緩衝區基礎知識

2.2 緩衝區的組成結構如下:

1.       Buffers(緩衝區)

一個緩衝區可以保持一個資料塊在任何時刻的的映象。

2.       Buffer headers(緩衝區頭)

儲存緩衝內容的後設資料(metadata)

作為一種快取的管理結構。

3.       Buffer pools(緩衝池)

收集相同用途的緩衝區,並對它們做相應的管理

4.       它們的工作職責

緩衝池的全部或者一部分。

分配給一個DBWn程式。

2.3  緩衝區管理

緩衝區是通過雙向連結串列來管理的。

REPL

這塊緩衝區中包含正在使用的塊映象。

REPL-AUX(輔助REPL):

這塊緩衝區用來做I/OCR(一致性讀)的重建工作。

WRITE and CKPT-Q

髒塊請求I/O佇列。

WRITE-AUX(輔助WRITE):

正在進行IO操作的髒緩衝。

 

緩衝區管理用計數的方式來決定塊最初插塊莖入到REPL連結串列中的位置。

輔助REPL連結串列用於避免多餘的掃描。

3.Redobuffer cache的關係

1.       當一個塊發生修改時,緩衝區中會包含這個塊的髒塊映象,併產生redo

2.       一個塊在redo的一個的RBA 上變髒,RBA重做日誌塊(redo log block)的地址。

3.       lgwr程式將redo寫入相應的redo log file,並將log file的狀態設為active

4.       髒塊映象被DBWn程式寫入資料檔案,並且將redo log file置為inactive狀態。

5.       Redo總是在髒塊寫入資料檔案之前完成。

6.       在日誌檔案中的Active redo的大小,會影響instance crash的恢復時間。

7.       需要在效能和恢復時間之間做好權衡。

3.2  Buffer Cache I/O

3.2.1  服務程式在輔助REPL上尋找一個可用的buffer,然後再將一個資料塊讀進來。

1. 將快取從輔助REPL讀取到REPL

2. 如果塊被修改了,則修改的塊會被增加到CKPT-Q(檢查點佇列)

3. 在搜尋可用空間的過程中,服務程式會同時將髒快取寫出。

3.2.2 DBWn將髒塊內容重新整理輸出到資料庫中

1.記憶體讀從寫快取區被移動到輔助寫快取區。

2.一旦塊被寫入後:

Buffer 被移回到輔助寫快取區。

Buffercheckpoint佇列中移出。

3.2.3  DBWn的程式寫請求

1.促使緩衝區空閒。

2.Checkpoint

4.什麼是檢查點?

1.       一個在特定時間點發生的同步事件。

2.       促使部分或者所有的髒塊的映象寫入到資料庫,由此保證在那個點(checkpoint)之前髒掉的資料庫塊能夠被及時寫入資料庫。

3.       將資料庫狀態帶到新的時間點。

4.       存在很多種不同型別的檢查點。

 

 

5.Checkpoint的種類

1.完全檢查點。

2.執行緒檢查點。

3.檔案檢查點。

4.物件檢查點。

5.並行查詢檢查點。

6.增量檢查點。

7.檔案切換檢查點(Log Switch Checkpoint)。

注:通過設定log_checkpoints_to_alert=true,某些檢查點能夠被記錄到alter日誌中。

5.2 完全檢查點

1.       在所有的例項中(針對rac),將髒衝區的塊重新整理輸出到資料庫

2.       變更的統計資訊條目(v$sysstat, name):

DBWR checkpoints

DBWR checkpoint buffers written

DBWR thread checkpoint buffers written

3.       發生的情況:

Alter system checkpoint [global]

Alter database begin backup

Alter database begin backup

Shutdown

4.       控制檔案頭和資料檔案頭被更新。

CHECKPOINT_CHANGE#

5.       相關問題:

log switch 之後,oracle instance是否發生一個完全檢查點?
oracle8i之前(包括8i),一直是這樣做的,但是oracle 8i之後,就這種方式就被改變了。

 

5.3 執行緒檢查點

1.       在單個例項中(針對rac而言),將髒衝區的塊重新整理輸出到資料庫。

2.       變更的統計資訊條目:

DBWR checkpoints

DBWR checkpoint buffers written

DBWR thread checkpoint buffers written

3.       發生的情況:

Alter system checkpoint local

4.       控制檔案頭和資料檔案頭被更新。

CHECKPOINT_CHANGE#

5.4 檔案檢查點

1.       在所有例項中,將一個表空間中的所有資料檔案中的髒衝區塊重新整理輸出到資料庫。

2.       變更的統計資訊:

DBWR tablespace checkpoint buffers written

DBWR checkpoint buffers written

DBWR檢查點。

3.       發生的情況:

Alter tablespace XXX offline

Alter tablespace XXX begin backup

Alter tablespace XXX read only

4.       控制檔案頭和資料檔案頭被更新。

CHECKPOINT_CHANGE#

5.5 並行查詢檢查點

1.       在所有例項中,當進行並行查詢時,這個查詢有關的objects的所有髒塊會被重新整理資料到資料庫。

2.       變更的統計資訊.

DBWR checkpoint buffers written

DBWR checkpoints

3.       發生情況.

並行查詢。

PDML(並行DML)和PDDL(並行DDL)中的並行查詢部分。

強制一致性。(direct io

5.6 物件檢查點

1.       在所有例項中,將一個物件的所有髒塊輸出到資料庫。

2.       變更的統計資訊條目:

DBWR object drop buffers written

DBWR checkpoints

3.       一般在drop/truncate段時發生:

Drop table XXX

Drop table XXX purge

Truncate table XXX

Drop index XXX

4.       強制性介質恢復的目的。(原文:Mandatory for media recovery purposes

1.       從檢查點佇列中,重新整理輸出一部分髒塊到資料庫。

5.7 增量檢查點

塊映象以SCN號的順序來寫。

Checkpointrba地址在SGA中被更新。

2.       變更的統計資訊:

DBWR checkpoint buffers written

3.       控制檔案每3秒鐘被CKPT程式更新一次。

Checkpoint程式記錄進度。

 

5.8 一些其它的定義

3秒鐘,CKPT程式會根據以下引數來計算目標檢查點的RBA地址:

1.       最近的RBA地址。

2.       log_checkpoint_timeout

3.       log_checkpoint_interval

4.       fast_start_mttr_target

5.       fast_start_io_target

6.       最小線上日誌檔案的90%

在所有的快取區髒掉之前,將對應的目標RBA寫入到資料庫中。

5.9 檔案切換檢查點

寫一部分髒塊內容到資料庫中。

變更的統計資訊:

DBWR checkpoints

DBWR checkpoint buffers written

background checkpoints started

background checkpoints completed

控制檔案頭和資料檔案頭被更新:

CHECKPOINT_CHANGE#

6.檢查點管理

一些有用的檢查點管理檢視:

V$INSTANCE_RECOVERY

V$SYSSTAT

V$DATABASE

V$INSTANCE_LOG_GROUP

V$THREAD

V$DATAFILE

V$DATAFILE_HEADER

 

問:什麼是oracle checkpoint的目的?

:checkpoint的目的是:為了實現資料庫的一致性,為了效能和恢復,同步所有的資料檔案,部分資料檔案或者一些物件到一個一致的時間點。但是必需在他們控制作之前控制他們(翻譯者補充:意思是這塊的效能影響會比較大,需要理解他們的原理 。)。

 

 

6.2 Checkpoint發生的觸發條件

V$INSTANCE_RECOVERY

WRITES_MTTR

fast_start_mttr_target

WRITES_LOGFILE_SIZE

90% of the smallest online redo log file

WRITES_LOG_CHECKPOINT_SETTINGS

log_checkpoint_timeout

WRITES_OTHER_SETTINGS

fast_start_io_target

WRITES_AUTOTUNE

10g self tuning checkpoints

WRITES_FULL_THREAD_CKPT

Manual checkpoints

7.調整線上日誌檔案(online redo log file)的大小

1.增量checkpoint不應該被線上日誌檔案的大小所觸發。

2.線上日誌檔案的大小必需被正確的設定。

3.使用REDO LOG檔案大小的建議:

V$INSTANCE_RECOVERYOPTIMAL_LOGFILE_SIZE引數

4.或者參照:

V$INSTANCE_RECOVERYWRITES_LOGFILE_SIZE引數

5.使用archive_lag_target引數去控制日誌檔案切換(log switch)的頻率。

6.在一個oraclerac系統上,日誌必需在所有的例項上被準確的設定。

注意:線上日誌檔案,只會因為設定的過小,不會嫌大。

 

8.總結

如果效能是一個很關鍵的一個指標。那麼,在進行以下操作時要尤其小心:

1.       drop/truncate object

2.       將表空間置於read only狀態時。

3.       將資料庫或表空間置於backup模式時。

1.       在有dml的物件上進行並行查詢。

2.       調整線上重做日誌檔案的大小。

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

相關文章