詳解PostgreSQL中的checkpoint概念

作者: 大肚熊  來源: 博客園  發布時間: 2010-10-09 18:03  閱讀: 4756 次  推薦: 0   原文鏈接   [收藏]  
摘要:在這里我們將討論的是PostgreSQL中的檢查點概念,也就是checkpoint。執行控制和檢查數據一致性、完整性功能。

  checkpoint又名檢查點,在oracle中checkpoint的發生意味著之前的臟數據全部寫回磁盤,數據庫實現了一致性與數據完整性。oracle在實現介質恢復時將以最近的checkpoint為參照點執行事務前滾。在postgresql中checkpoint起著相同的作用:寫臟數據;完成數據庫的完整性檢查。

  checkpoints相關參數:
  checkpoint_segments:
  WAL log的最大數量,系統默認值是3。該值越大,在執行介質恢復時處理的數據量也越大,時間相對越長。
  checkpoint_timeout:
  系統自動執行checkpoint之間的最大時間間隔,同樣間隔越大介質恢復的時間越長。系統默認值是5分鐘。
  checkpoint_completion_target:
  該參數表示checkpoint的完成目標,系統默認值是0.5,也就是說每個checkpoint需要在checkpoints間隔時間的50%內完成。
  checkpoint_warning:
  系統默認值是30秒,如果checkpoints的實際發生間隔小于該參數,將會在server log中寫入寫入一條相關信息。可以通過設置為0禁用信息寫入。

  checkpoint執行控制:
  1,數據量達到checkpoint_segments*16M時,系統自動觸發;
  2,時間間隔達到checkpoint_timeout參數值時;
  3,用戶發出checkpoint命令時。

  checkpoints參數調整:
  正確合適的參數值總能夠給系統帶來益處,checkpoints參數合理的配置不僅能夠減少系統IO寫入的阻塞,同時還會減少高峰時IO給系統帶來的壓力。
  首先可以通過觀察checkpoint_warning參數寫入的日志,來估算系統寫入的數據量:一般情況下    checkpoint_warning參數值小于checkpoint_timeout;
  估算公式:checkpoint_segments*16M*(60s/m)/checkpoint_warning=大致每分鐘數據量,得到每分鐘寫入的數據量(這里全部是估算,建立在warning參數的合理設置上)。
  合理配置情況:checkpoint_segments*16M*checkpoint_timeout(m)略大于上述值.
  以上述公式為依據,配置checkpoint_segments與checkpoint_timeout,兩個參數應該盡量平衡為一個足夠大和足夠小的值。
  在數據量異常高的情況下應該考慮,磁盤帶寬與checkpoint時數據量的關系。

  個人觀點:
  假如以checkpoint_segments參數為閥值時,可以計算高峰時需要的帶寬(秒):checkpoint_segments*16M/(checkpoint_warning*checkpoint_completion_target)。
  假如以checkpoint_timeout參數為閥值時,checkpoint_warning值最好大于等于checkpoint_timeout,通過監控系統數據字典統計寫入的數據量Total。
  Total/(checkpoint_timeout*checkpoint_completion_target)得到IO的帶寬要求。

  歡迎大家一起討論。

0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()