| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 25. 預寫式日志(Write-Ahead Logging (WAL)) | Fast Forward | Next |
UNDO 操作還沒有實現。 這就意味著由退出的事務做的修改將仍然佔據磁盤空間, 因此我們仍然需要一個永久的 pg_clog 文件保存事務的狀態,因為我們不能回收事務標識符。一旦實現了 UNDO, 那麼 pg_clog 就不再要求是永久的了; 我們就有可能在關閉的時候刪除 pg_clog。 (不過,這方面的緊迫性已經隨著我們對 pg_clog 採取分段存儲的方法而降低了:我們不再需要永久保留 pg_clog 記錄。)
有了 UNDO,我們還可能實現 savepoints, 這樣就允許非法事務操作的部分回卷(因為誤敲了命令導致的分析器錯誤, 插入了重復的主鍵/唯一鍵字等等)同時還能夠繼續或提交該事務在發生錯誤之前的合法操作。 目前,任何錯誤都將使整個事務成為非法並且要求事務退出。
WAL 還提供了數據庫在線備份和恢復(backup and restore (BAR))的新方法。 要使用這個方法,我們可能要經常性地把數據文件保存到另外一個磁盤, 磁帶或者另外一台主機並且還要備份 WAL 日志文件。 那麼數據庫文件拷貝和日志歸檔文件就可以用于象災難恢復中那樣恢復數據。 每次做完新數據庫文件以後,這個老的日志文件就可以刪除了。 實現這個設施可能需要記錄數據文件和索引創建和刪除的日志; 同時還需要開發一種方法來拷貝數據文件(操作系統拷貝命令是不合適的)。
認識這些事情的好處的一個困難是它們要求在相當可觀的時間段內保存 WAL 日志(也就是說,如果需要事務的 UNDO, 那麼和可能的最長的事務的時間一樣長)。目前的 WAL 格式的體積相當大,因為它包括多個磁盤頁的鏡像。 目前這還不是一個嚴重的問題,因為這些日志只需要保留一到兩個檢查點的時間間隔; 但是為了實現這些東西,以後我們可能需要某種壓縮的 WAL 格式。