本篇描述緩衝快取(buffer cache),以及用來在故障後還原資料一致性的預寫式日誌(write-ahead log,WAL)。
這兩者是同一個問題的兩面:緩衝快取讓資料留在 RAM 中以換取速度,而 RAM 中的資料在當機時會全部消失——WAL 正是為了讓「先寫記憶體、稍後才落盤」這個交易變得安全而存在。
本篇涵蓋#
- 緩衝快取——快取的必要性、緩衝快取的內部設計(緩衝區陣列、雜湊表、pin 與 usage count)、命中與未命中時發生什麼、時鐘掃描淘汰演算法、大量操作用的緩衝環、快取大小的選擇與暖機,以及暫存表格專用的本地快取。
- 預寫式日誌——日誌記錄的原理、WAL 的結構與 LSN、檢查點(checkpoint)如何界定復原起點、故障後的復原流程,以及背景寫入行程的角色。
- WAL 模式——效能與可靠性之間的取捨:同步/非同步提交、
fsync與full_page_writes等參數的實際意義,以及各種設定組合在當機時的後果。
貫穿本篇的核心規則只有一條——預寫(write-ahead):任何資料頁面的修改落到磁碟之前,描述該修改的日誌條目必須先落到磁碟。理解這條規則,後面所有關於檢查點、full page writes 與同步提交的討論才會各得其位。