postgresql , 10.0 , 自動預熱緩存
資料庫的shared buffer可以用來存儲經常使用的資料塊,以提升效率。通過lru算法老化不常用的資料塊。
是以在生産資料庫中,shared buffer中通常是熱資料。
資料庫如果重新開機,或者發生主備切換,緩存中的熱資料需要從磁盤(或者os page cache)重新載入資料庫的shared buffer。
當這個事情發生在業務高峰期時,由于熱資料未在資料庫緩存中,通路将會變慢,使用者的感覺可能是請求變慢了。
為了提升使用者體驗,減少請求的響應時間的抖動,postgresql 10.0推出了自動預熱緩存的技術。
也就是說shared buffer的block list chain會記錄下來,下次啟動時,自動載入shared buffer.
這個patch的讨論,詳見郵件組,本文末尾url。
postgresql社群的作風非常嚴謹,一個patch可能在郵件組中讨論幾個月甚至幾年,根據大家的意見反複的修正,patch合并到master已經非常成熟,是以postgresql的穩定性也是遠近聞名的。
<a href="https://commitfest.postgresql.org/13/848/">https://commitfest.postgresql.org/13/848/</a>
<a href="https://www.postgresql.org/message-id/flat/cad__ougw7kc+1-cga8gm0t+fuuhqpyr9aow6ozx48sbh=v8bww@mail.gmail.com#cad__ougw7kc+1-cga8gm0t+fuuhqpyr9aow6ozx48sbh=v8bww@mail.gmail.com">https://www.postgresql.org/message-id/flat/cad__ougw7kc+1-cga8gm0t+fuuhqpyr9aow6ozx48sbh=v8bww@mail.gmail.com#cad__ougw7kc+1-cga8gm0t+fuuhqpyr9aow6ozx48sbh=v8bww@mail.gmail.com</a>