溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Postgresql的Checkpoint

發布時間:2021-11-09 15:54:07 來源:億速云 閱讀:297 作者:iii 欄目:關系型數據庫

這篇文章主要講解了“怎么使用Postgresql的Checkpoint”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么使用Postgresql的Checkpoint”吧!

Checkpoint是什么?

checkpoint又名檢查點,一般checkpoint會將某個時間點之前的dirty data全部寫出到磁盤,以實現數據的一致性與完整性。目前各個流行的關系型數據庫都具備checkpoint功能,其主要目的是為了縮短crash recovery time,以Oracle為例,在進行數據恢復時,會以最近的checkpoint為參考點執行事務roll forward,然后對沒有commit的事務進行roll back。而在WAL機制的淺析中,也提過PostgreSQL在崩潰恢復時會以最近的checkpoint為基礎,不斷應用這之后的WAL日志。機制大致相同。

PG的檢查點種類:

在xlog.h文件中,有如下代碼對checkpoint進行了相應的分類:

/*

* OR-able request flag bits for checkpoints. The "cause" bits are used only

* for logging purposes. Note: the flags must be defined so that it's

* sensible to OR together request flags arising from different requestors.

*/

/* These directly affect the behavior of CreateCheckPoint and subsidiaries */

#define CHECKPOINT_IS_SHUTDOWN 0x0001 /* Checkpoint is for shutdown */

#define CHECKPOINT_END_OF_RECOVERY 0x0002 /* Like shutdown checkpoint,

* but issued at end of WAL

* recovery */

#define CHECKPOINT_IMMEDIATE 0x0004 /* Do it without delays */

#define CHECKPOINT_FORCE 0x0008 /* Force even if no activity */

/* These are important to RequestCheckpoint */

#define CHECKPOINT_WAIT 0x0010 /* Wait for completion */

/* These indicate the cause of a checkpoint request */

#define CHECKPOINT_CAUSE_XLOG 0x0020 /* XLOG consumption */

#define CHECKPOINT_CAUSE_TIME 0x0040 /* Elapsed time */

#define CHECKPOINT_FLUSH_ALL 0x0080 /* Flush all pages, including those

也就是說,以下幾種情況會觸發數據庫操作系統做檢查點操作:

數據庫shutdown

數據庫recovery完成

超級用戶(其他用戶不可)執行CHECKPOINT命令

XLOG日志量達到了觸發checkpoint閾值

周期性地進行checkpoint

觸發checkpoint時,需要刷新所有臟頁,為了能夠周期性的創建檢查點,減少崩潰恢復時間,同時合并I/O,PostgreSQL提供了輔助進程checkpointer。它會周期性檢測時間以及上面的XLOG日志量閾值是否達到,而周期時間以及XLOG日志量閾值可以通過參數來設置大小,接下來介紹下與checkpoints相關的參數。

checkpoints相關的參數

checkpoint_segments

       當前最大的WAL日志文件段的數量,或者說,當系統的日志量達到這么多的時觸發一個檢查點,其缺省值為3, 每個段的大小是16M,因此大概64M日志觸發一個檢查點。調大這個數將延長系統崩潰后恢復的時間。

checkpoint_timeout

      系統自動執行checkpoint之間的最大時間間隔。系統默認值是5分鐘。

checkpoint_completion_target

       手冊上原文為“Specifies the target of checkpoint completion, asa fraction of total time between checkpoints”,完成檢查點所需要的時間/檢查點之間總時間的目標比例*100%,它要求系統在恰當的時間內完成檢查點,不要太快也不要太慢,過快將導致過于密集的IO, 形成IO風暴影響系統的平穩運行,過慢則可能引發持續性的IO, 降低系統性能。

checkpoint_warning

       系統默認值是30秒,如果checkpoints的實際發生間隔小于該參數,將會在server log中寫入寫入一條相關信息??梢酝ㄟ^設置為禁用。

checkpoint相關的計算:

checkpoint_completion_target對計算起著決定性的作用

假如參數這樣配置:

shared_buffers = 128GB # 1/4 內存

checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0

checkpoint_timeout = 30min

max_wal_size = 256GB # 2*shared_buffers

min_wal_size = 64GB # shared_buffers * 1/2

1:極端假設128G全是臟數據

(128*1024)/(30*60*0.9)= 80.90864198 MB/s

要求磁盤的平均離散IO至少在這個之上,否則存在瓶頸,因為觸發時刻,壓力更大。

當然前提假設,128G都是臟的,如果臟數據不多,壓力更小

2:假設周期內產生256G的WAL

那么

(256*1024)/ (30*60)= 145.6355556 MB/s

WAL為順序IO

3:bgWriter

業務上寫操作除了產生WAL,還有bgwriter周期性地寫出臟塊,因為一個塊可能被多次修改,但是writer此時可能更少

(256*1024)/ (30*60)= 145.6355556 MB/s

綜上,數據庫寫操作吞吐均值可能是 80.9 MB/s + 145.6 MB/s+ 145.6 MB/s=372MB/s

出發瞬間的壓力可能超過此值。

感謝各位的閱讀,以上就是“怎么使用Postgresql的Checkpoint”的內容了,經過本文的學習后,相信大家對怎么使用Postgresql的Checkpoint這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女