PG:checkpoint是什么?該如何寫數(shù)據(jù)?
PG:checkpoint是什么
Checkpoint是PG中的核心概念。然而會有用戶對此比較陌生,不知道如何調(diào)優(yōu)。本文解釋checkpoint及如何調(diào)優(yōu),希望對數(shù)據(jù)庫內(nèi)核理解有所幫助。
PG如何寫數(shù)據(jù)
詳細(xì)討論checkpoint前,理解PG是如何write數(shù)據(jù)的非常重要,看下面的圖:
重要的假設(shè)是crash會發(fā)生在任何時間。為什么和這個相關(guān)?需要確認(rèn)數(shù)據(jù)庫永遠(yuǎn)不會被破壞。我們不能直接將數(shù)據(jù)寫入數(shù)據(jù)文件。為甚?假設(shè)要將“1234”寫入數(shù)據(jù)文件,如果在“12”后面崩潰,結(jié)果將是表中某個位置的一個元組被破壞,索引條目可能丟失等。我們必須不惜一切代價防止這種情況發(fā)生。
因此需要更加復(fù)雜的數(shù)據(jù)寫入方法。PG首先將數(shù)據(jù)寫入WAL,WAL就像一個包含二進(jìn)制變化的順序磁帶。如果添加一行,WAL可能包含一條記錄,用于記錄數(shù)據(jù)文件哪些地方改動了,可能包含一組索引記錄改動的指令、可能需要寫入一個額外的頁等,僅包含一系列變化。
數(shù)據(jù)一旦寫入WAL,PG將會對共享緩存區(qū)中的數(shù)據(jù)頁進(jìn)行更改,注意數(shù)據(jù)文件中仍沒有數(shù)據(jù),F(xiàn)在有了WAL條目及共享緩沖區(qū)的臟頁。如果一個讀取請求來了,可從緩存中找到,而不用到磁盤上讀取。
某個時刻,內(nèi)存中的臟頁會由后臺寫入進(jìn)程寫入磁盤。這里最重要的一點是,數(shù)據(jù)可能會被亂序?qū)懭,這個是沒有問題的。如果用戶想讀取數(shù)據(jù),PG先從共享緩沖區(qū)中獲取。因此臟頁的寫入順序與此無關(guān)。甚至可以晚一點寫入,以增加一次sync的量。
刪除WAL
WAL不能無限寫入,需要回收空間。這就是CHECKPOINT需要干的活之一。
Checkpoint的目的就是確保臟頁刷寫到磁盤,然后該臟頁對應(yīng)的WAL及之前的WAL就可以刪除回收了。PG的方法啟動一個checkpoint進(jìn)程,將bgwriter進(jìn)程沒有刷寫的刷寫到磁盤。但是這個過程并沒有盡可能快的刷,我們需要使IO平穩(wěn),保證穩(wěn)定的響應(yīng)時間。
控制checkpoint平穩(wěn)的參數(shù)為:
test=# SHOW checkpoint_completion_target;checkpoint_completion_target------------------------------0.5(1 row)
到下個checkpoint開始前完成刷寫一半。真實情況下對于大多數(shù)負(fù)載0.7-0.9就可以了,但可以隨意設(shè)置。注意PG14中這個參數(shù)就會取消了,硬編碼值為0.9。下一個問題是:什么時候進(jìn)行checkpoint呢?參數(shù)為:
test=# SHOW checkpoint_timeout;checkpoint_timeout--------------------5min(1 row)test=# SHOW max_wal_size;max_wal_size--------------1GB(1 row)
如果系統(tǒng)的負(fù)載比較低,在一段時間后進(jìn)行checkpoint。默認(rèn)值是5分鐘,但建議增加這個值以提高寫入性能。注意,請隨意修改這個值,僅會影響性能,不會以任何方式傷害數(shù)據(jù)庫,除了性能沒有數(shù)據(jù)會有風(fēng)險。
max_wal_size有點棘手,這個是個軟限制,不是硬限制。因此WAL會超過這個值。這個值為了告訴PG可以堆積多少WAL,從而挑戰(zhàn)checkpoint,F(xiàn)實中,提高這個值會消耗更多空間,但是會提高性能。
為啥不將max_wal_size設(shè)置成無限大呢?首先很明顯,這樣就需要更多空間。另外,一旦數(shù)據(jù)庫崩潰,PG就需要從上個checkpoint處開始回放,這樣回放的時間就非常長了。如果檢查點的距離增加,性能確實會提升,但是所做的和想要達(dá)到的效果有限,從某種意義上說,在這個問題上投入更多存儲空間不會改變?nèi)魏问虑椤?/p>
后臺寫進(jìn)程會將臟頁刷寫到磁盤,然而許多情況下,更多工作是由checkpoint進(jìn)程本身完成,因此關(guān)注checkpoint比后臺寫進(jìn)程有意義。
min_wal_size:神秘參數(shù)
min_wal_size 和max_wal_size有什么區(qū)別呢?如果PG空閑,會逐漸將WAL量減少到min_wal_size,這是個緩慢的過程,不是立即一蹴而就。假設(shè)本周內(nèi)有高寫負(fù)載,但是在周末會空閑。禮拜五下午,WAL量會很多,但是周末,會漸漸減少。當(dāng)?shù)街芤缓,WAL量又會增加。
因此最后將min_wal_size的值設(shè)置的不要太小。

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-9.16點擊進(jìn)入 >> 【限時福利】TE 2025國際物聯(lián)網(wǎng)展·深圳站
-
10月23日立即報名>> Works With 開發(fā)者大會深圳站
-
10月24日立即參評>> 【評選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評選
-
11月27日立即報名>> 【工程師系列】汽車電子技術(shù)在線大會
-
12月18日立即報名>> 【線下會議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
精彩回顧立即查看>> 【限時下載】ADI中國三十周年感恩回饋助力企業(yè)升級!
推薦專題
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進(jìn)算力新選擇 | 2025華為算力場景發(fā)布會暨北京xPN伙伴大會成功舉辦
- 3 宇樹機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 清華跑出具身智能獨角獸:給機(jī)器人安上眼睛和大腦,融資近20億
- 5 踢館大廠和微軟,剖析WPS靈犀的AI實用主義
- 6 特朗普要求英特爾首位華人 CEO 辭職
- 7 AI版“四萬億刺激”計劃來了
- 8 騰訊 Q2 財報亮眼:AI 已成第二增長曲線
- 9 谷歌吹響AI沖鋒號,AI還有哪些機(jī)會
- 10 騰訊米哈游押寶的中國AI應(yīng)用,正在海外悶聲發(fā)財