PostgreSQL checkpoint原理
今天來談一下PostgreSQL 的checkpoint原理。檢查點功能在現有流行的資料庫中都具備。如Oracle,MySQL等,尤其是Oracle 對檢查點功能的實現,非常完善。Oracle不
僅有全域性檢查點,還有增量檢查點,即非常著名的 “Incremental checkpoint”。雖然各大資料庫實現的方式不同,但是主要目的都是一樣的,都是為了縮短資料庫恢復的時間。
那麼其實PG也有自己的檢查點實現。
1.PG檢查點的型別
Shutdown檢查點:在PG例項shutdown時做的檢查點
Recovery End檢查點:在recovery 結束階段做的檢查點,類似於shutdown檢查點,只不過在WAL恢復結束時發起。
Immediate檢查點:不僅僅建立檢查點,而且會馬上做。這類請求一般在比較緊急的情況下,需要馬上獲取資料庫一致狀態的情況下。
Force檢查點:即使沒有xlog變更,也會做。請求這類檢查點,往往只是想得到最近的checkpoint location而已。
上面幾個檢查點,會直接影響檢查點的建立以及檢查點的完成時機。
Wait檢查點:檢查點不會馬上做,但會一直等待,直到檢查點完成。
往往比較重要的一些操作,但不是非常緊急的,可以請求該類檢查點。尤其是一些DDL操作,對資料一致性要求高於響應時間。
另外,還有一類檢查點,這類檢查只是作為logging的標識:
xlog檢查點:由xlog的消耗引起,產生新xlog檔案。
time檢查點:由時間elapse引起。
flush檢查點:當發起flush 所有pages時發起,包括那些不logging的表。
PG會根據目的以及不同時機,請求相應的檢查點。
2.PG檢查點的機理
checkpoint程式由postmaster負責建立。作為postmaster的子程式而存在,為幾大重要的後臺程式之一。
從下圖中,可知postmaster程式號為2694。checkpoint的程式號為2696,其父程式號為2694,即為postmaster。
checkpoint程式掛掉後,postmaster會殺掉所有backend程式,然後逐一恢復後臺程式,有點類似於系統被初始化後。可見此程式對資料一致保護的重要性。
因為資料庫系統要達到一個目的:即任何已經做過checkpoint的更改,不需要從WAL日誌中恢復。這大大加快了資料庫系統crash後的恢復速度。
在原始碼中,checkpoint相關的資訊由一個結構體記錄,放在共享記憶體段中:
它儲存了當前checkpoint 的pid,檢查點起始位置,檢查點完成位置以及檢查點型別等資訊。另外也維護了一個檢查點佇列。一般的檢查點請求只是建立一個檢查點位置,並放到佇列中,並不會馬上做,檢查點排程由另外邏輯來控制。
checkpoint的位點是跟xlog的位置強相關的,其實就是WAL日誌的位點。
每當檢查完成之時,就必須要求此檢查點前的資料更改或者髒頁被寫入物理磁碟,並持久化。
做檢查點時大致可以分為兩個過程:
1).遍歷所有BUFFER,將當前時刻的所有DIRTY的塊狀態改為CHECKPOINT_NEEDED,來表示需要將這些髒塊寫出到磁碟。
注意這一步,還是在記憶體中完成的,並不涉及到磁碟操作。
2).刷物理檔案,從快取中將髒塊fsync到磁碟。
這一步涉及到磁碟操作。將標記為CHECKPOINT_NEEDED的block寫出到磁碟。
3).Checkpoint 本身也會被記錄到XLOG中
上面講到的檢查點結構體內容以及長度等資訊,會被刷出到xlog中。
4).更新控制檔案
更新控制檔案中的檢查點資訊到當前位置. 下面粗體部分就是檢查點相關內容:
[postgres@db1 ~]$ pg_controldata /opt/pgdata |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30088583/viewspace-1690812/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Postgresql 的CheckpointSQL
- PostgreSQL備機checkpointSQL
- PostgreSQL xlog格式之checkpointSQL
- PostgreSQL-PG程式之checkpoint(四)SQL
- postgresql 檢查點調整 checkpoint 轉SQL
- 【PG】PostgreSQL 預寫日誌(WAL)、checkpoint、LSNSQL
- PostgreSQL DBA(168) - pgAdmin(config:checkpoint)SQL
- PostgreSQL DBA(66) - 配置引數(checkpoint_flush_after)SQL
- PostgreSQL DBA(64) - checkpoint_completion_target引數解析SQL
- PostgreSQL啟動恢復透過checkpoint open wal檔案SQL
- PostgreSQL pg_rewind原理SQL
- PostgreSQL vacuum原理—vacuum揭秘SQL
- PostgreSQL啟動恢復讀取checkpoint記錄失敗的條件SQL
- PostgreSQL vacuum原理—啟動機制SQL
- mysql checkpointMySql
- Postgres Checkpoint
- Oracle CheckpointOracle
- oracle內部原理_如何修改block資料塊大體流程_checkpointOracleBloC
- PostgreSQL vacuum原理一功能與引數SQL
- Apache Flink 進階(三):Checkpoint 原理解析與應用實踐Apache
- 【Flink入門修煉】2-3 Flink Checkpoint 原理機制
- Checkpoint總結
- checkpoint 優化優化
- checkpoint詳解(zt)
- Oracle checkpoint詳解Oracle
- 初學checkpoint and scn
- Incremental checkpoint up to RBAREM
- 理解TimesTen中兩個CheckPoint檔案與Trans Log的關係及其原理
- ckpt(checkpoint)機制研究
- oracle checkpoint檢查點Oracle
- checkpoint詳解(部分轉)
- Checkpoint和SCN的解析
- Oracle checkpoint詳解一Oracle
- Oracle checkpoint詳解二Oracle
- Oracle中的checkpoint程式Oracle
- PostgreSQL的AutoVacuum原理及autovacuum不工作問題解析SQL
- PostgreSQL、Oracle/MySQL和SQL Server的MVCC實現原理方式OracleMySqlServerMVC
- MySQL checkpoint執行時機MySql