postgresql , 10.0 , slave , promote , 提前蘇醒 , lsn , 讀一緻性
postgresql 資料庫的wal為重做日志,如果資料庫crash,那麼需要等待wal來恢複資料庫,隻有當資料庫恢複到一緻狀态時,才能将資料庫喚醒(或者說此時資料庫才是一緻的)。
資料庫被喚醒後(promote),客戶就可以對資料庫執行查詢、增删改查的動作了。
那麼如果資料庫需要apply很多的wal檔案,導緻喚醒前的等待時間很長怎麼辦?
有什麼方法能提前讓資料庫蘇醒嗎?
其實有,因為資料塊都是有lsn的,如果資料庫未達到一緻位點,其實可以提供隻讀服務給使用者,當使用者讀取的lsn比檢查點早時,說明這個資料塊是一緻的,如果讀取到的lsn比檢查點晚,說明這個資料塊可能是dirty的,需要wal恢複,那麼可以傳回錯誤給使用者,。
10.0提供了提前蘇醒的功能。
這個patch的讨論,詳見郵件組,本文末尾url。
postgresql社群的作風非常嚴謹,一個patch可能在郵件組中讨論幾個月甚至幾年,根據大家的意見反複的修正,patch合并到master已經非常成熟,是以postgresql的穩定性也是遠近聞名的。
<a href="https://commitfest.postgresql.org/13/847/">https://commitfest.postgresql.org/13/847/</a>
<a href="https://www.postgresql.org/message-id/flat/caeyp7j8z6dmjzgna5f0n3tseahhfu5bt2er91ec5rddxhn4ntg@mail.gmail.com#caeyp7j8z6dmjzgna5f0n3tseahhfu5bt2er91ec5rddxhn4ntg@mail.gmail.com">https://www.postgresql.org/message-id/flat/caeyp7j8z6dmjzgna5f0n3tseahhfu5bt2er91ec5rddxhn4ntg@mail.gmail.com#caeyp7j8z6dmjzgna5f0n3tseahhfu5bt2er91ec5rddxhn4ntg@mail.gmail.com</a>