postgresql synchronous_commit參數(shù)的用法介紹
synchronous_commit
指定在命令返回”success”指示給客戶端之前,一個事務是否需要等待 WAL 記錄被寫入磁盤。
合法的值是{local,remote_write,remote_apply,on,off}
默認的并且安全的設置是on。
不同于fsync,將這個參數(shù)設置為off不會產(chǎn)生數(shù)據(jù)庫不一致性的風險:一個操作系統(tǒng)或數(shù)據(jù)庫崩潰可能會造成一些最近據(jù)說已提交的事務丟失,但數(shù)據(jù)庫狀態(tài)是一致的,就像這些事務已經(jīng)被干凈地中止。因此,當性能比完全確保事務的持久性更重要時,關閉synchronous_commit可以作為一個有效的代替手段。
這個參數(shù)可以隨時被修改;任何一個事務的行為由其提交時生效的設置決定。因此,可以同步提交一些事務,同時異步提交其他事務。例如,當默認是相反時,實現(xiàn)一個單一多語句事務的異步提交,在事務中發(fā)出SET LOCAL synchronous_commit TO OFF。
單實例環(huán)境
on:
當數(shù)據(jù)庫提交事務時,wal先寫入 wal buffer 再寫入 wal 日志文件,設置成on表示提交事務時需等待本地wal寫入wal日志后才向客戶端返回成功。
on 為默認設置,數(shù)據(jù)庫非常安全,但性能有所損耗。
off:
當數(shù)據(jù)庫提交事務時不需要等待本地 wal buffer 寫入 wal 日志,隨即向客戶端返回成功,設置成off會給數(shù)據(jù)庫帶來一點風險:數(shù)據(jù)庫宕機時最新提交的少量事務可能丟失,數(shù)據(jù)庫重啟后會認為這些事務異常終止,會rollback。
適用對數(shù)據(jù)庫準確性要求不高同時追求數(shù)據(jù)庫性能的的場景。
local:
local含義和on類似,表示提交事務時需要等待本地wal寫入后才向客戶端返回成功。
流復制環(huán)境
on:
表示流復制主庫提交事務時,需等待備庫接收主庫發(fā)送的wal日志流并寫入wal文件,之后才向客戶端返回成功,簡單的說on表示本地wal已落盤,備庫的wal也已落盤,有兩份持久化的wal,但備庫此時還沒有完成重做。
這個選項帶來的事務響應時間較高。
remote_write:
表示流復制主庫提交事務時,需等待備庫接收主庫發(fā)送的wal日志流并寫入備節(jié)點操作系統(tǒng)緩存中,之后向客戶端返回成功,這種情況下備庫出現(xiàn)異常關閉時不會有已傳送的wal日志丟失風險,但備庫操作系統(tǒng)異常宕機就有已傳送的wal丟失風險了,此時wal可能還沒有完全寫入備節(jié)點wal文件中,簡單的說 remote_write 表示本地wal已落盤,備庫的wal還在備庫操作系統(tǒng)緩存中,也就是說只有一份持久化的wal。
這個選項帶來的事務響應時間較低。
remote_apply:
表示流復制主庫提交事務時,需等待備庫接收主庫發(fā)送的wal流并寫入wal文件,同時備庫已經(jīng)完成重做,之后才向客戶端返回成功,簡單的說remote_apply 表示本地wal已落盤,備庫wal已落盤并且已經(jīng)完成重做,這個設置保證了擁有兩份持久化的wal,同時備庫也已經(jīng)完成了重做。
這個選項帶來的事務響應時間最高。
補充:postgresql wal日志部分參數(shù)
fsync
fsync :控制wal日志刷新是否開啟刷新到磁盤,此參數(shù)控制wal_sync_method參數(shù)的刷新方法,如果fsync為off,則wal_sync_method的方法是沒有意義的,
如果沒開啟這個參數(shù),則可能由于wal日志塊沒有刷新到磁盤永久存儲而導致故障發(fā)生后實例出現(xiàn)塊折斷(oracle稱其為block curruption)
wal_sync_method
wal_sync_method :wal日志刷新方法,可選值為open_datasync/fdatasync/fsync/fsync_writethrough/open_sync
linux系統(tǒng)默認為fdatasync,以open開頭的在某些系統(tǒng)上不支持
wal_buffers
wal_buffers :wal緩沖區(qū),默認為-1,大小為1/32的shared_buffer,最小不少于64k,最大不大于一個wal_segment(默認16M大小),一般保持默認即可,因為過了wal_writer_delay(默認200ms)總會刷新清空此緩存,設置太大了也用不上.
wal_writer_delay
wal_writer_delay:前面已經(jīng)說過,這有點類似oracle和mysql的1s定時寫日志策略,每隔這么長時間就會刷wal日志緩沖區(qū)的數(shù)據(jù),然后sleep,到點后再刷,如此循環(huán)往復.
commit_delay
commit_delay :提交的延遲時間,如果設置了此參數(shù),則會commit后延遲一段時間再進行提交,此機制可以合并其他事務進而一起進行組提交,不過合并的事務數(shù)是有限制的,要至少有commit_siblings參數(shù)個事務等待提交的時候才會延遲,所有當有大量事務的時候會延遲,而如果事務很稀少就不會再被延遲了.
commit_siblings
commit_siblings :組提交個數(shù)的最少個數(shù),此參數(shù)上面已經(jīng)進行說明
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
在Linux系統(tǒng)上安裝PostgreSQL數(shù)據(jù)庫
這篇文章介紹了在Linux系統(tǒng)上安裝PostgreSQL數(shù)據(jù)庫的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-03-03postgresql數(shù)據(jù)庫使用說明_實現(xiàn)時間范圍查詢
這篇文章主要介紹了postgresql數(shù)據(jù)庫使用說明_實現(xiàn)時間范圍查詢,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01PostgreSQL數(shù)據(jù)庫時間類型相加減操作
PostgreSQL提供了許多函數(shù),這些函數(shù)返回與當前日期和時間相關的值,下面這篇文章主要給大家介紹了關于PostgreSQL數(shù)據(jù)庫時間類型相加減操作的相關資料,需要的朋友可以參考下2023-10-10PostgreSQL之分區(qū)表(partitioning)
通過合理的設計,可以將選擇一定的規(guī)則,將大表切分多個不重不漏的子表,這就是傳說中的partitioning。比如,我們可以按時間切分,每天一張子表,比如我們可以按照某其他字段分割,總之了就是化整為零,提高查詢的效能2016-11-11PostgreSQL使用JSONB存儲和查詢復雜的數(shù)據(jù)結構
在PostgreSQL中,JSONB是一種二進制格式的JSON數(shù)據(jù)類型,它允許你在數(shù)據(jù)庫中存儲和查詢復雜的JSON數(shù)據(jù)結構,本文給大家介紹了如何使用JSONB類型在PostgreSQL中存儲和查詢復雜的數(shù)據(jù)結構,需要的朋友可以參考下2024-04-04詳解PostgreSql數(shù)據(jù)庫對象信息及應用
這篇文章主要介紹了PostgreSql數(shù)據(jù)庫對象信息及應用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12