這篇文章主要講解了“怎么使用Postgresql的Checkpoint”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么使用Postgresql的Checkpoint”吧!
創(chuàng)新互聯(lián)服務項目包括沈河網(wǎng)站建設、沈河網(wǎng)站制作、沈河網(wǎng)頁制作以及沈河網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,沈河網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到沈河省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
checkpoint又名檢查點,一般checkpoint會將某個時間點之前的dirty data全部寫出到磁盤,以實現(xiàn)數(shù)據(jù)的一致性與完整性。目前各個流行的關系型數(shù)據(jù)庫都具備checkpoint功能,其主要目的是為了縮短crash recovery time,以Oracle為例,在進行數(shù)據(jù)恢復時,會以最近的checkpoint為參考點執(zhí)行事務roll forward,然后對沒有commit的事務進行roll back。而在WAL機制的淺析中,也提過PostgreSQL在崩潰恢復時會以最近的checkpoint為基礎,不斷應用這之后的WAL日志。機制大致相同。
在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
也就是說,以下幾種情況會觸發(fā)數(shù)據(jù)庫操作系統(tǒng)做檢查點操作:
數(shù)據(jù)庫shutdown
數(shù)據(jù)庫recovery完成
超級用戶(其他用戶不可)執(zhí)行CHECKPOINT命令
XLOG日志量達到了觸發(fā)checkpoint閾值
周期性地進行checkpoint
觸發(fā)checkpoint時,需要刷新所有臟頁,為了能夠周期性的創(chuàng)建檢查點,減少崩潰恢復時間,同時合并I/O,PostgreSQL提供了輔助進程checkpointer。它會周期性檢測時間以及上面的XLOG日志量閾值是否達到,而周期時間以及XLOG日志量閾值可以通過參數(shù)來設置大小,接下來介紹下與checkpoints相關的參數(shù)。
checkpoint_segments
當前最大的WAL日志文件段的數(shù)量,或者說,當系統(tǒng)的日志量達到這么多的時觸發(fā)一個檢查點,其缺省值為3, 每個段的大小是16M,因此大概64M日志觸發(fā)一個檢查點。調(diào)大這個數(shù)將延長系統(tǒng)崩潰后恢復的時間。
checkpoint_timeout
系統(tǒng)自動執(zhí)行checkpoint之間的最大時間間隔。系統(tǒng)默認值是5分鐘。
checkpoint_completion_target
手冊上原文為“Specifies the target of checkpoint completion, asa fraction of total time between checkpoints”,完成檢查點所需要的時間/檢查點之間總時間的目標比例*100%,它要求系統(tǒng)在恰當?shù)臅r間內(nèi)完成檢查點,不要太快也不要太慢,過快將導致過于密集的IO, 形成IO風暴影響系統(tǒng)的平穩(wěn)運行,過慢則可能引發(fā)持續(xù)性的IO, 降低系統(tǒng)性能。
checkpoint_warning
系統(tǒng)默認值是30秒,如果checkpoints的實際發(fā)生間隔小于該參數(shù),將會在server log中寫入寫入一條相關信息。可以通過設置為禁用。
checkpoint_completion_target對計算起著決定性的作用
假如參數(shù)這樣配置:
shared_buffers = 128GB # 1/4 內(nèi)存
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全是臟數(shù)據(jù)
(128*1024)/(30*60*0.9)= 80.90864198 MB/s
要求磁盤的平均離散IO至少在這個之上,否則存在瓶頸,因為觸發(fā)時刻,壓力更大。
當然前提假設,128G都是臟的,如果臟數(shù)據(jù)不多,壓力更小
2:假設周期內(nèi)產(chǎn)生256G的WAL
那么
(256*1024)/ (30*60)= 145.6355556 MB/s
WAL為順序IO
3:bgWriter
業(yè)務上寫操作除了產(chǎn)生WAL,還有bgwriter周期性地寫出臟塊,因為一個塊可能被多次修改,但是writer此時可能更少
(256*1024)/ (30*60)= 145.6355556 MB/s
綜上,數(shù)據(jù)庫寫操作吞吐均值可能是 80.9 MB/s + 145.6 MB/s+ 145.6 MB/s=372MB/s
出發(fā)瞬間的壓力可能超過此值。
感謝各位的閱讀,以上就是“怎么使用Postgresql的Checkpoint”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對怎么使用Postgresql的Checkpoint這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!
當前標題:怎么使用Postgresql的Checkpoint
分享路徑:http://vcdvsql.cn/article22/jhejjc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司、搜索引擎優(yōu)化、App設計、定制開發(fā)、微信公眾號、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)