checkpoint 優化
什麼是checkpoint
Checkpoint是為了記憶體中已經被修改的資料塊與磁碟資料檔案同步的一種資料庫事件。它提供了一種保持事務提交以後資料一致的手段。往Oracle磁碟寫髒資料的機制與事務提交不是同步的。
checkpoint有兩個目的:
1、確保資料一致性。
2、使資料庫能快速地恢復。
怎樣快速恢復
因為資料庫會把所有的改變都在資料檔案上設定checkpoint並一直增加,它不需要請求checkpoint之前的重做日誌,Checkpoint能保證所有在快取區的資料寫到相應的資料檔案,防止因為意外的例項失敗導致的資料丟失。
Oracle寫這個髒資料只在一定的條件下:
1、DBWR 超時,大約3秒時間
2、系統中沒有多的空緩衝區來存放資料
3、CKPT程式(產生新的checkpoint) 觸發DBWR。
一個checkpoint有5中事件型別:
1、每次重做日誌的切換;
2、LOG_CHECKPOINT_TIMEOUT 這個延遲引數的到達;
3、相應位元組(LOG_CHECKPOINT_INTERVAL* size of IO OS blocks)被寫到當前的重做日誌;
4、ALTER SYSTEM SWITCH LOGFILE 這個命令會直接導致checkpoint發生
5、ALTER SYSTEM CHECKPOINT
Checkpoint期間會有下面程式發生:
1. DBWR寫所有髒資料到資料檔案;
2. LGWR更新控制檔案和資料檔案的SCN。
Checkpoints和優化:
Checkpoints是一個資料庫優化的難點。頻繁的Checkpoints可以實現快速的恢復,但也會使效能下降。怎樣處理這個問題呢?
依賴於資料庫資料檔案的數量,一個Checkpoint可能是高速的執行。因為所有的資料檔案在Checkpoint期間都會被凍結。更頻繁的Checkpoints可以快速恢復資料庫。這也客戶對不按規定系統當機的容忍的原因。然而,在一些特殊情況下,頻繁的Checkpoints也不能保證可以快速恢復。我們假設資料庫在95%的時間內是正常執行,5%由於例項失敗導致不可用,要求恢復。對大多數客戶而言,他們更希望調整95%的效能而不是5%的當機時間。這個假設表明,效能是擺在第一位的,所以我門的目標就是在優化期間減少Checkpoints的頻繁度。
優化Checkpoints包括4個關鍵的初始化引數:
- FAST_START_MTTR_TARGET
- LOG_CHECKPOINT_INTERVAL
- LOG_CHECKPOINT_TIMEOUT
- LOG_CHECKPOINTS_TO_ALERT
詳細介紹每個引數:
FAST_START_MTTR_TARGET:
Oracle9i以來FAST_START_MTTR_TARGET 引數是調整checkpoint的首選的方法。FAST_START_MTTR_TARGET 可以指定單例項恢復需要的秒數。基於內部的統計,增長的checkpoint會自動調整的checkpint的目標以滿足FAST_START_MTTR_TARGET 的需求。
V$INSTANCE_RECOVERY.ESTIMATED_MTTR 顯示當前估計需要恢復的秒數。這個值會被顯示即使FAST_START_MTTR_TARGET 沒有被指定。
V$INSTANCE_RECOVERY.TARGET_MTTR 表明在短時間內MTTR的目標。
V$MTTR_TARGET_ADVICE 顯示這個當前MTTR設定的工作量產生的I/O數量和其他I/O。這個檢視幫助使用者評定這個在優化和恢復之前的平衡。
LOG_CHECKPOINT_INTERVAL:
LOG_CHECKPOINT_INTERVAL 引數指定這個最大的重做塊的間隔數目。如果FAST_START_MTTR_TARGET被指定,LOG_CHECKPOINT_INTERVAL不能被設定為0。
在大多數Unix系統的OS塊大小是512位元組。設定LOG_CHECKPOINT_INTERVAL=10000意味著這個增長的checkpoint不能追加到當前日誌,因為多於5M。如果你的重做日誌是20M,你將發出4個checkpoint對每個重做日誌。
LOG_CHECKPOINT_INTERVAL 會發生影響當一個checkpoint發生時,小心設定這個引數,保持它隨著重做日誌檔案大小變化而變化。checkpoint頻繁是這個影響資料庫恢復的原因之一。短的checkpoint間隔意味資料庫將快速恢復,也增加了資源的利用。這個引數也影響資料庫向前回滾的時間。實際的恢復時間是基於這個時間,當然還有失敗的型別和需要歸檔日誌的數量。
LOG_CHECKPOINT_TIMEOUT:
這個引數指定checkpoint發出的時間間隔。換句話說,它指定一次髒資料多少時間寫出一次。checkpoint頻率會影響這個資料庫恢復的時間。長時間的間隔會要求資料庫恢復要求更久。Oracle建議用LOG_CHECKPOINT_interval去控制checkpoint而不用LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_TIMEOUT每n秒發一次checkpoint,不顧事務提交的頻率。這可能會導致一些沒有必要的checkpoint在事務已經變化的情況下。不必要的checkpoint必須被避免。還有一個容易誤解的地方:LOG_CHECKPOINT_TIMEOUT 會間隔性地發出log switch。而Log switch會觸發一個checkpoint,但checkpoint不會導致一個log switch。唯一手工方式alter system switch logfile或者重新設定redo logs大小可以導致頻繁switch。
SQL> alter system set log_checkpoint_timeout=300;[單位是秒]
log_checkpoint_to_alert:
設定為真,可以在告警日誌中觀察到增量檢查點的觸發。
SQL> alter system set log_checkpoints_to_alert=true;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22990797/viewspace-743721/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spark效能優化:對RDD持久化或CheckPoint操作Spark優化持久化
- 針對enq: KO - fast object checkpoint的優化ENQASTObject優化
- 【CHECKPOINT】Oracle檢查點優化與故障處理Oracle優化
- 檢查點(Checkpoint)優化及故障排除指南 (文件 ID 1526118.1)優化
- mysql checkpointMySql
- Postgres Checkpoint
- Oracle CheckpointOracle
- Postgresql 的CheckpointSQL
- PostgreSQL checkpoint原理SQL
- Checkpoint總結
- 位元組跳動流式資料整合基於Flink Checkpoint兩階段提交的實踐和優化優化
- 前端效能優化(JS/CSS優化,SEO優化)前端優化JSCSS
- PostgreSQL備機checkpointSQL
- checkpoint詳解(zt)
- Oracle checkpoint詳解Oracle
- 初學checkpoint and scn
- Incremental checkpoint up to RBAREM
- 效能優化案例-SQL優化優化SQL
- MSSQL優化之索引優化SQL優化索引
- CUDA優化之指令優化優化
- Android效能優化----卡頓優化Android優化
- 資料庫優化 - SQL優化資料庫優化SQL
- 【前端效能優化】vue效能優化前端優化Vue
- 前端效能優化 --- 圖片優化前端優化
- sql優化之邏輯優化SQL優化
- [效能優化]DateFormatter深度優化探索優化ORM
- SQL優化:limit分頁優化SQL優化MIT
- (mysql優化-3) 系統優化MySql優化
- MySQL 效能優化之索引優化MySql優化索引
- MySQL優化-安裝配置優化MySql優化
- Web效能優化:圖片優化Web優化
- MySQL 效能優化之SQL優化MySql優化
- ckpt(checkpoint)機制研究
- oracle checkpoint檢查點Oracle
- checkpoint詳解(部分轉)
- Checkpoint和SCN的解析
- Oracle checkpoint詳解一Oracle
- Oracle checkpoint詳解二Oracle