天天看點

postgresql 主從同步模式

postgresql主從開始實時同步模式:

synchronous_commit:

同步送出參數, 控制事務送出後傳回用戶端是否成功的政策

可選值為:on, remote_write, local, off

on

1 為on且沒有開啟同步備庫的時候,會當wal日志真正重新整理到磁盤永久存儲後才會傳回用戶端事務已送出成功,

2 當為on且開啟了同步備庫的時候(設定了synchronous_standby_names),必須要等事務日志重新整理到本地磁盤,并且還要等遠端備庫也送出到磁盤才能傳回用戶端已經送出.

off:

寫到緩存中就會向用戶端傳回送出成功,但也不是一直不刷到磁盤,延遲寫入磁盤,延遲的時間為最大3倍的wal_writer_delay參數的(預設200ms)的時間,所有如果即使關閉synchronous_commit,也隻會造成最多600ms的事務丢失,此事務甚至包括已經送出的事務(會丢資料),但資料庫确可以安全啟動,不會發生塊折斷,隻是丢失了部分資料,但對高并發的小事務系統來說,性能來說提升較大。

remote_write:

當事務送出時,不僅要把wal重新整理到磁盤,還需要等wal日志發送到備庫作業系統(但不用等備庫重新整理到磁盤),是以如果備庫此時發生執行個體中斷不會有資料丢失,因為資料還在作業系統上,而如果作業系統故障,則此部分wal日志還沒有來得及寫入磁盤就會丢失,備庫啟動後還需要想主庫索取wal日志。

remote_apply:

表示流複制主庫送出事務時,需等待備庫接收主庫發送的wal流并寫入wal檔案,同時備庫已經完成重做,之後才向用戶端傳回成功,簡單的說remote_apply 表示本地wal已落盤,備庫wal已落盤并且已經完成重做,這個設定保證了擁有兩份持久化的wal,同時備庫也已經完成了重做。

這個選項帶來的事務響應時間最高。

local:

當事務送出時,僅寫入本地磁盤即可傳回用戶端事務送出成功,而不管是否有同步備庫。

如果沒有設定同步備庫,則 on/remote_write/local都是一樣的,僅等待事務重新整理到本地磁盤.

此參數還可以局部設定,當有臨時批量任務時可以這樣設定:

SET LOCAL synchronous_commit TO OFF;

這樣局部事務可向備庫異步的方式同步,而其他重要的事務以同步的方式向備庫同步。