🎯 什麼情境該想到我
當你想理解(或自己實作)「系統當機/斷電後,資料如何不丟、狀態如何回復一致」時。
⚙️ 怎麼用
核心原則:先寫日誌,再改資料(Write-Ahead)。 只要日誌落盤,就算資料還沒寫完,重啟後也能靠日誌重建。
- 每次修改前,先把「要做什麼」順序追加寫入 WAL 並 fsync 落盤。
- 提交(commit)以日誌寫入成功為準,實際資料頁可稍後再刷。
- 崩潰復原(ARIES 三階段):分析 → 重做(redo 已提交但未落盤的)→ 撤銷(undo 未提交的)。
- WAL 也是複製與 CDC 的資料來源(把日誌串流給從庫)。
🧪 我實際套用的紀錄
- 2026-07-15:(待填)
⚠️ 注意
- 「寫了」不等於「落盤」;沒 fsync 的日誌在斷電時一樣會丟。持久化的關鍵在 fsync。
🔗 相關工具
- 工具-儲存引擎B-Tree與LSM-Tree —— 使用者,兩種引擎都靠 WAL 保證斷電不丟資料
- 工具-資料複製 —— 延伸應用,複製串流本質上就是把 WAL 傳到其他副本重放
- 工具-Transactional-Outbox-Pattern —— 應用層的同一思路,先寫進同一個交易再由別人重放