PG技術(shù)大講堂 - 第14講:PostgreSQL 檢查點(diǎn)
最新學(xué)訊:近期OCP認(rèn)證正在報(bào)名中,因考試人員較多請(qǐng)盡快報(bào)名獲取最近考試時(shí)間,報(bào)名費(fèi)用請(qǐng)聯(lián)系在線老師,甲骨文官方認(rèn)證,報(bào)名從速!
我要咨詢
PostgreSQL從小白到專家,是從入門逐漸能力提升的一個(gè)系列教程,內(nèi)容包括對(duì)PG基礎(chǔ)的認(rèn)知、包括安裝使用、包括角色權(quán)限、包括維護(hù)管理、、等內(nèi)容,希望對(duì)熱愛PG、學(xué)習(xí)PG的同學(xué)們有幫助,歡迎持續(xù)關(guān)注CUUG PG技術(shù)大講堂。
Part 14:PostgreSQL檢查點(diǎn)
內(nèi)容1:檢查點(diǎn)觸發(fā)機(jī)制
內(nèi)容2:檢查點(diǎn)作用
內(nèi)容3:檢查點(diǎn)如何工作
內(nèi)容4:檢查點(diǎn)如何調(diào)整
檢查點(diǎn)處理過程
· 檢查點(diǎn)觸發(fā)機(jī)制
在PostgreSQL中,檢查點(diǎn)(后臺(tái))進(jìn)程執(zhí)行檢查點(diǎn);當(dāng)發(fā)生下列情況之一時(shí),其進(jìn)程將啟動(dòng): ? 檢查點(diǎn)間隔時(shí)間由checkpoint_timeout設(shè)置(默認(rèn)間隔為300秒(5分鐘)) ? 在9.5版或更高版本中,pg_xlog中WAL段文件的總大小(在10版或更高版本中為pg_WAL)已超過參數(shù)max_WAL_size的值(默認(rèn)值為1GB(64個(gè)16MB文件))。 ? PostgreSQL服務(wù)器在smart或fast模式下關(guān)閉。 ? 手動(dòng)checkpoint。
檢查點(diǎn)作用
· 為什么需要檢查點(diǎn)
所有的數(shù)據(jù)庫幾乎都有檢查點(diǎn)機(jī)制,為什么需要檢查點(diǎn)呢,有以下幾個(gè)作用:
1、定期保存修改過的數(shù)據(jù)塊(保護(hù)勞動(dòng)果實(shí))
檢查點(diǎn)發(fā)生時(shí),檢查點(diǎn)進(jìn)程會(huì)把共享緩沖區(qū)中的臟塊(被修改過的塊)寫入磁盤,永久保存,否則如果發(fā)生主機(jī)斷電等故障,內(nèi)存中的數(shù)據(jù)塊就會(huì)丟失,該檢查點(diǎn)的發(fā)生頻率由checkpoint_timeout控制,定期發(fā)生。
2、做為實(shí)例恢復(fù)時(shí)起始位置
如果發(fā)生實(shí)例崩潰,那么下一次啟動(dòng)時(shí)則需要進(jìn)行實(shí)例恢復(fù),數(shù)據(jù)庫根據(jù)最近一次檢查點(diǎn)的位置作為起始位置開始recovery。
3、做為介質(zhì)恢復(fù)時(shí)起始位置
每次進(jìn)行物理備份時(shí)都會(huì)發(fā)生一個(gè)檢查點(diǎn),用來判斷將來進(jìn)行恢復(fù)時(shí)的起始位置,因?yàn)閭浞輹r(shí)數(shù)據(jù)文件是有先后順序,備份出來的數(shù)據(jù)文件是不一致的,將來恢復(fù)出來后需要應(yīng)用歸檔日志把他們變成同步,開始備份的位置就是將來recovery的位置。
XLOG 寫記錄
· 檢查點(diǎn)工作流程
檢查點(diǎn)記錄位置
· 控制文件
控制文件中記錄了檢查點(diǎn)的相關(guān)信息 ? Latest checkpoint location –最新檢查點(diǎn)記錄的LSN位置。 ? Prior checkpoint location –先前檢查點(diǎn)記錄的LSN位置。
pg_control File
· 控制文件
控制文件中記錄的檢查點(diǎn)相關(guān)信息
postgres> pg_controldata /usr/local/pgsql/data
pg_control 最后修改: 2022/10/25 10:36:29
最新檢查點(diǎn)位置: 0/65441F8
最新檢查點(diǎn)的 REDO 位置: 0/65441F8
最新檢查點(diǎn)的重做日志文件: 000000010000000000000006
最新檢查點(diǎn)的 TimeLineID: 1
最新檢查點(diǎn)的PrevTimeLineID: 1
... snip ...
Database Recovery
· 利用檢查點(diǎn)做為recovery的起始位置
檢查點(diǎn)調(diào)整
? 檢查點(diǎn)發(fā)生的間隔時(shí)間決定了實(shí)例恢復(fù)需要的時(shí)長(zhǎng),checkpoint_timeout設(shè)置的值應(yīng)該根據(jù)業(yè)務(wù)的需求設(shè)置,以實(shí)例崩潰時(shí),下一次打開數(shù)據(jù)庫時(shí)長(zhǎng)的容忍度而設(shè)置。
? 間隔時(shí)間短,則實(shí)例恢復(fù)需要的時(shí)間就短,可提高數(shù)據(jù)庫的可用性,但是會(huì)增加I/O操作,降低數(shù)據(jù)庫狀態(tài)性能,檢查點(diǎn)發(fā)生時(shí)屬于密集型I/O操作,會(huì)占用大量系統(tǒng)資源。
? 間隔時(shí)間長(zhǎng),則實(shí)例恢復(fù)需要的時(shí)間就長(zhǎng),會(huì)降低數(shù)據(jù)庫的可用性,但是會(huì)減少I/O操作,提高數(shù)據(jù)庫狀態(tài)性能。
checkpoint_completion_target
? 數(shù)據(jù)庫中一個(gè)至關(guān)重要的參數(shù),主要與參數(shù)checkpoint_timeout(checkpoint_timeout)配合使用,值越小意味著檢查點(diǎn)要越快完成,要求寫得要快。
? 控制每次檢查點(diǎn)發(fā)生時(shí)i/o的吞吐量,值越高,則i/o占用的資源越少,數(shù)據(jù)庫性能越好;值越低,則i/o占用的資源越多,影響數(shù)據(jù)庫性能,但是提高檢查點(diǎn)完成速度。
往期視頻和教程,聯(lián)系cuug
- 冉乃綱-老師CUUG金牌講師
- 冉老師 CUUG金牌講師 Oracle及RedHat高級(jí)講師、Unix/Linux 資深專家...[詳細(xì)了解老師]

- 陳衛(wèi)星-老師CUUG金牌講師
- 陳老師 CUUG金牌講師 精通Oracle管理、備份恢復(fù)、性能優(yōu)化 11年Ora...[詳細(xì)了解老師]
