詳解PostgreSQL中的checkpoint概念

來源:互聯網
上載者:User

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的頻寬要求。

原文標題:postgresql之checkpoints

連結:http://www.cnblogs.com/daduxiong/archive/2010/09/28/1837682.html

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.