postgresql中wal_level的三個參數用法說明
wal_level中有三個主要的參數:minimal、archive和hot_standby
1、minimal是默認的值,它僅寫入崩潰或者突發(fā)關機時所需要的信息(不建議使用)。
2、archive是增加wal歸檔所需的日志(最常用)。
3、hot_standby是在備用服務器上增加了運行只讀查詢所需的信息,一般實在流復制的時候使用到。
補充:postgresql WAL相關參數
配置文件
# - Settings - wal_level = minimal # minimal, replica, orlogical # (changerequires restart) #fsync = on # flush data to disk for crash safety # (turningthis off can cause # unrecoverable datacorruption) #synchronous_commit =on # synchronization level; # off, local,remote_write, remote_apply ,or on #wal_sync_method =fsync # the default is thefirst option # supported by theoperating system: # open_datasync # fdatasync (default on Linux) # fsync # fsync_writethrough # open_sync full_page_writes =on # recover from partial page writes #wal_compression =off # enable compression of full-pagewrites #wal_log_hints =off # also do full pagewrites of non-critic al updates # (change requiresrestart) #wal_buffers = -1 # min 32kB, -1 sets basedon shared_buffers # (change requiresrestart) #wal_writer_delay = 200ms # 1-10000 milliseconds #wal_writer_flush_after= 1MB # 0 disables #commit_delay = 0 # range 0-100000, inmicroseconds #commit_siblings =5 # range 1-1000 # - Checkpoints - #checkpoint_timeout =5min # range 30s-1d #max_wal_size = 1GB #min_wal_size = 80MB #checkpoint_completion_target= 0.5 # checkpoint target duration,0.0 - 1.0 #checkpoint_flush_after= 0 # 0 disables #default is 256kB on linux, 0 otherwise #checkpoint_warning =30s # 0 disables
wal_level
控制wal存儲的級別。wal_level決定有多少信息被寫入到WAL中。默認值是最小的(minimal),其中只寫入從崩潰或立即關機中恢復的所需信息。replica 增加 wal 歸檔信息同時包括只讀服務器需要的信息。(9.6 中新增,將之前版本的 archive 和 hot_standby合并)
fsync
該參數直接控制日志是否先寫入磁盤。默認值是ON(先寫入)。開啟該值時表明,更新數據寫入磁盤時系統(tǒng)必須等待WAL的寫入完成。可以配置該參數為OFF,更新數據寫入磁盤完全不用等待WAL的寫入完成,沒有了等待的時間,顯然接下來的工作能夠更早的去做,節(jié)省了時間,提高了性能。其直接隱患是無法保證在系統(tǒng)崩潰時最近的事務能夠得到恢復,也就無法保證相關數據的真實與正確性。
synchronous_commit
該參數表明是否等待WAL完成后才返回給用戶事務的狀態(tài)信息。默認值是ON,表明必須等待WAL完成后才返回事務狀態(tài)信息。配置OFF值能夠更快的反饋回事務狀態(tài)。因參數只是控制事務的狀態(tài)反饋,因此對于數據的一致性不存在風險。但事務的狀態(tài)信息影響著數據庫的整個狀態(tài)。該參數可以靈活的配置,對于業(yè)務沒有嚴謹要求的事務可以配置為OFF,能夠為系統(tǒng)的性能帶來不小的提升。
wal_sync_method
WAL 寫入磁盤的控制方式,默認值是fsync??蛇x用值:open_datasync,fdatasync,fsync_writethrough,fsync,open_sync。一般采用默認值即可,對于裸設備或文件系統(tǒng)的可選配置,在實際的使用中所帶來的方便相對fsync很有限。
full_page_writes
參數表明是否將整個page寫入WAL。postgresql中數據處理過程中的數據只保存在內存和WAL中,在內存中的整個page中包含更新提交和沒有提交的,如果不將整個page寫入WAL中,在介質恢復的時候WAL中記錄的數據不足以實現完整的恢復(說白了就是無法實現介質恢復時事務的回滾)。
wal_buffers
用于存放WAL數據的內存空間,最小32K。
wal_writer_delay
WAL writer進程的間歇時間。默認值是200ms。準確的配置應該根據自身系統(tǒng)的運行狀況。如果時間過長可能造成WAL buffer的內存不足;反之過小將會引起WAL的不斷的寫入,對磁盤的IO也是很大考驗。
wal_writer_flush_after
wal write的字節(jié)數超過配置的閾值(wal_writer_flush_after)時,觸發(fā)fsync,默認值為1MB,如果設置為0,關閉該特性(9.6版本新增的參數)
commit_delay
表示一個已經提交的數據在WAL buffer中存放的時間,單位ms,默認值是0,不用延遲。非0值表示可能存在多個事務的WAL同時寫入磁盤。如果設置為非0,表明了某個事務執(zhí)行 commit后不會立即寫入WAL中,而仍存放在WAL buffer中,這樣對于后面的事務申請WAL buffer時非常不利,尤其是提交事務較多的高峰期,可能引起WAL buffer內存不足。如果內存足夠大,可以盡量延長該參數值,能夠使數據集中寫入這樣降低了系統(tǒng)的IO,提高了性能。同樣如果此時崩潰數據面臨著丟失的危險。
commit_siblings
該參數還決定了commit_delay的有效性。系統(tǒng)默認值是5。表示當一個事務發(fā)出提交請求,此時數據庫中正在執(zhí)行的事務數量大于5,則該事務將等待一段時間(commit_delay的值),反之,該事務則直接寫入WAL。
checkpoint_timeout
生成檢查點的最大的間隔時間。
checkpoint_completion_target
參數表示checkpoint的完成目標,系統(tǒng)默認值是0.5,也就是說每個checkpoint需要在checkpoints間隔時間的50%內完成。
PostgreSQL 9.5 廢棄了checkpoint_segments 參數, 并引入max_wal_size 和 min_wal_size 參數, 通過max_wal_size和checkpoint_completion_target參數來控制產生多少個XLOG后觸發(fā)檢查點, 通過min_wal_size和max_wal_size參數來控制哪些XLOG可以循環(huán)使用.
min_wal_size
最小的wal 空間
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
解決postgreSql 將Varchar類型字段修改為Int類型報錯的問題
這篇文章主要介紹了解決postgreSql 將Varchar類型字段修改為Int類型報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12PostgreSQL實現按年、月、日、周、時、分、秒的分組統(tǒng)計
這篇文章介紹了PostgreSQL實現按年、月、日、周、時、分、秒分組統(tǒng)計的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06Postgresql排序與limit組合場景性能極限優(yōu)化詳解
這篇文章主要介紹了Postgresql排序與limit組合場景性能極限優(yōu)化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12Postgresql中json和jsonb類型區(qū)別解析
在我們的業(yè)務開發(fā)中,可能會因為特殊【歷史,偷懶,防止表連接】經常會有JSON或者JSONArray類的數據存儲到某列中,這個時候再PG數據庫中有兩種數據格式可以直接一對多或者一對一的映射對象,接下來通過本文介紹Postgresql中json和jsonb類型區(qū)別,需要的朋友可以參考下2024-06-06Postgresql 存儲過程(plpgsql)兩層for循環(huán)的操作
這篇文章主要介紹了Postgresql 存儲過程(plpgsql)兩層for循環(huán)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01