pg wal的最佳實踐

2021-02-23 DB之路

背景:

PostgreSQL在寫入頻繁的場景中,可能會產生大量的WAL日誌,而且WAL日誌量遠遠超過實際更新的數據量。我們可以把這種現象起個名字,叫做「WAL寫放大」,造成WAL寫放大的主要原因有2點。

在checkpoint之後第一次修改頁面,需要在WAL中輸出整個page,即全頁寫(full page writes)。全頁寫的目的是防止在意外宕機時出現的數據塊部分寫導致資料庫無法恢復。

更新記錄時如果新記錄位置(ctid)發生變更,索引記錄也要相應變更,這個變更也要記入WAL。更嚴重的是索引記錄的變更又有可能導致索引頁的全頁寫,進一步加劇了WAL寫放大。

過量的WAL輸出會對系統資源造成很大的消耗,因此需要進行適當的優化。

磁碟IO
WAL寫入是順序寫,通常情況下硬碟對付WAL的順序寫入是綽綽有餘的。所以一般可以忽略。

網絡IO
對區域網內的複製估計還不算問題,遠程複製就難說了。

磁碟空間
如果做WAL歸檔,需要的磁碟空間也是巨大的。

優化手段:

PostgreSQL在未經優化的情況下,20倍甚至更高的WAL寫放大是很常見的,適當的優化之後應該可以減少到3倍以下。引入SSL/SSH壓縮或歸檔壓縮等外部手段還可以進一步減少WAL的生成量。

如何判斷是否需要優化WAL?

關於如何判斷是否需要優化WAL,可以通過分析WAL,然後檢查下面的條件,做一個粗略的判斷:

FPI比例高於70%

HOT_UPDATE比例低於70%

以上僅僅是粗略的經驗值,僅供參考。並且這個FPI比例可能不適用於低寫負載的系統,低寫負載的系統FPI比例一定非常高,但是,低寫負載系統由於寫操作少,因此FPI比例即使高一點也沒太大影響。

優化WAL的副作用

前面用到了3種優化手段,如果設置不當,也會產生副作用,具體如下:

延長checkpoint時間間隔
導致crash恢復時間變長。crash恢復時需要回放的WAL日誌量一般小於max_wal_size的一半,WAL回放速度(wal_compression=on時)一般是50MB/s~150MB/s之間。可以根據可容忍的最大crash恢復時間(有備機時,切備機可能比等待crash恢復更快),估算出允許的max_wal_size的最大值。

調整fillfactor
過小的設置會浪費存儲空間,這個不難理解。另外,對於頻繁更新的表,即使把fillfactor設成100%,每個page裡還是要有一部分空間被dead tuple佔據,不會比設置一個合適的稍小的fillfactor更節省空間。

設置wal_compression=on
需要額外佔用CPU資源進行壓縮,但根據實測的結果影響不大。

相關焦點

  • postgresql email列表對NVM WAL BUFFER的討論
    不修改IO方式,有很多地方可以優化以提升性能:1)將WALWriteLock分成兩個鎖:一個用於寫,一個用於flush wal。現在,一個會話進行flush一個wal時,其他會話不能write wal,即使該wal位於其他段文件。沒有必要這樣做。
  • PG原生解碼工具pg_recvlogical的使用-在腦裂時幫我們找回丟失的數據
    pg有很多邏輯解碼的插件,其中pg原生的邏輯解碼工具pg_recvlogical就可以使用,它使用默認的test_decoding的插件,該插件位於pg源碼contrib/test_decoding目錄下,需要先對該目錄進行安裝,安裝完後會在pg安裝目錄的lib目錄下創建test_decoding連結庫文件。
  • 上腳球鞋亮眼,pg和歐文系列居多!
    大家覺得最佳新秀應該是誰的呢?是天賦滿滿,數據一開始就爆炸的zion?還是打法風騷且老成,有大局觀的莫蘭特呢?確實這兩人各有千秋,選秀順位又是上下位,在zion沒復出前,最佳新秀妥妥的莫蘭特,這個榮譽在他身上的討論就沒斷過,不過zion復出後,這些討論稍稍有些改變。
  • DHCP最佳實踐(三)
    ↑ 關注 + 星標 ~ 從此不迷路,後臺回復【AD】送你Windows AD學習資料這是Windows DHCP最佳實踐和技巧的最終指南如果您有任何最佳做法或技巧,請在下面的評論中發布它們。在本指南(三)中,我將分享以下DHCP最佳實踐和技巧。
  • PostgreSQL | 查LAST DDL TIME,PG的三種方法
    在我們對表進行DDL操作的同時會對pg_class基表也進行更新。現在,我們可以跟蹤pg_class基表,查看對應數據行的 xmin值,然後將它轉換為時間。postgres=# create table t(id numeric);CREATE TABLEpostgres=# select pg_xact_commit_timestamp(xmin), oid, relname from pg_class where relname ='t';   pg_xact_commit_timestamp
  • 4款實戰籃球鞋,水泥地也別怕「PG」系列
    另外,你個人的打球風格也是一個很重要的因素,可以根據這個選擇自己所需的不同類型的籃球鞋,今天就推薦便宜又好穿的籃球鞋,pg泡椒系列1.pg1Nike PG1 "Ivory" 鞋身採用網眼布和皮革鞋面,提供輕質支撐和出色透氣性,前足固定帶結合 Flywire 飛線,打造穩固貼合表現。
  • 我校再度榮獲「最佳實踐大學」
    11月5日,中國青年報公布「2020年第六屆尋找全國大學生百強暑期實踐團隊」評選結果,我校榮獲「最佳實踐大學」榮譽稱號,全國僅有浙江大學、重慶大學
  • 山東理工大學榮獲「最佳實踐大學」
    2019/12/28 19:47:54   來源:淄博日報       近日,中國青年報公布「2019年第五屆尋找全國大學生百強暑期實踐團隊
  • 福奈特榮獲「2018全球最佳實踐獎」
    原標題:福奈特榮獲「2018全球最佳實踐獎」2018年10月19日,國際織物護理委員會(CINET)舉辦的「全球最佳實踐獎」評選活動在義大利米蘭召開,本屆「全球最佳實踐獎」評選分為「洗衣店」與「洗衣工廠」兩個分類角逐。
  • Walgreens以myWalgreens重塑美國最大
    關於Walgreens Walgreens (www.walgreens.com)隸屬於全球零售藥店和藥品批發行業的領軍企業沃博聯(Walgreens Boots Alliance, Inc., Nasdaq: WBA)旗下的美國零售藥房部門。
  • pg電子冰雪大衝關怎麼玩?爆分技巧遊戲攻略過五關斬六將!
    這就是這款畫風非常可愛的pg電子《冰雪大衝關》的故事背景。 pg電子冰雪大衝關怎麼玩?PG冰雪大衝關爆分技巧的核心在於抓住遊戲的放水規律(爆分和吃分的時間)。話不多說,接下來就和各位老鐵分享pg電子冰雪大衝關遊戲爆分技巧攻略:pg冰雪大衝關爆分時間以及壓分技巧。
  • pg one新歌Penta Kill歌詞mv pg one給英雄聯盟唱的主題曲名字
    Penta Kill試聽:http://www.i/w_19rv8iuzzl.html  pg one個人資料  Penta Kill歌詞:  歌名:Pentakill  歌手:PG One  所屬專輯:Pentakill  歌詞編輯:  歌詞來源:www.qqmusic.cc
  • 4款實戰籃球鞋,水泥地也別怕「PG」系列
    另外,你個人的打球風格也是一個很重要的因素,可以根據這個選擇自己所需的不同類型的籃球鞋,今天就推薦便宜又好穿的籃球鞋,pg泡椒系列1.pg1Phylon 泡棉中底,輕盈舒適,前足 Zoom Air 氣墊,打造出色的回彈緩震性能,橡膠外底經久耐磨,抓地力非凡2.pg2
  • Slick-pg v0.14.0 發布,Slick 的 PostgresSQL 擴展
    Slick-pg v0.14.0 發布。
  • 南農發現PG和EXP基因共同抑制番茄果實開裂
    該研究以番茄為材料,發現同時抑制多聚半乳糖醛酸酶(polygalacturonase, PG)和擴張蛋白(expansin, EXP)基因表達的株系(pg/exp),其裂果率顯著低於野生型(Alisa Craig,AC)。PG能降解果膠骨架,EXP是一種非酶類的細胞壁活性蛋白,二者均能使植物細胞壁鬆弛、果實變軟。
  • PG one的名字是什麼意思?竟和這個NBA球星有關
    看到這個新聞,有很多朋友應該會有疑問:PG ONE這個名字怎麼來的,和pg(籃球裡的組織後衛)有什麼聯繫呢?其實,PG one本人曾經回答過這問題。他很喜歡打籃球,特別酷愛克裡斯.保羅,而保羅打的位置正是pg。他本人又本身什麼事情都喜歡爭第一,於是PG ONE這個名字就由此得來了。他在歌中也曾經提過:化身CP3的保羅。