天天看點

PostgreSQL 10.0 preview 功能增強 - slave提前蘇醒

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>