預寫式日誌

計算機科學中,預寫式日誌(Write-ahead logging,縮寫 WAL)是關係資料庫系統中用於提供原子性和持久性(ACID屬性中的兩個)的一系列技術。在使用WAL的系統中,所有的修改在生效之前都要先寫入log文件中。

log文件中通常包括redo和undo信息。這樣做的目的可以通過一個例子來說明。假設一個程序在執行某些操作的過程中機器掉電了。在重新啟動時,程序可能需要知道當時執行的操作是成功了還是部分成功或者是失敗了。如果使用了WAL,程序就可以檢查log文件,並對突然掉電時計劃執行的操作內容跟實際上執行的操作內容進行比較。在這個比較的基礎上,程序就可以決定是撤銷已做的操作還是繼續完成已做的操作,或者是保持原樣。

WAL允許用in-place方式更新資料庫。另一種用來實現原子更新的方法是shadow paging,它並不是in-place方式。用in-place方式做更新的主要優點是減少索引和塊列表的修改。ARIES是WAL系列技術常用的算法。在文件系統中,WAL通常稱為journaling。PostgreSQL也是用WAL來提供point-in-time恢復和資料庫複製特性。