PostgreSQL 高可靠性與預寫式日誌(WAL)
更新:2007-03-15
對映章節:III.C27
版本限制: > 7.1
內容:
商用 DBMS 為了確保在系統非預期下潰散後, 仍可複原至近 100% 潰散前的 DB 狀態, 大多採用 類似 PostgreSQL 預寫式日誌(Write-Ahead Logging :WAL)的關念, 預先將一連串的操作先行寫入到日誌檔, 來預防系統潰散時的損失, 對 DBMS 而言這是提高 HR 的重要功能.
(PostgreSQL 在 7.1+版後加入本功能, 至今仍不斷改良使用中)
高可靠性(High-Reliability)
PostgreSQL 的實現方式:
WAL 提供了資料庫即時備份和恢復(backup and restore (BAR))的實作
- 熱備份(Hot backup):利用 pg_dump 取得一定時間點的復原資料.
- 利用 WAL 來復原損失最少的狀態.
說明:
預寫式日誌 (WAL) 是一種實現交易日誌的標準方法。WAL 的中心思想是對資料文件的修改(它們是資料表和索引的載體)必須是只能發生在這些修改已經記錄了日誌之後, 也就是說,在描述這些變化的日誌記錄沖刷到永久儲存器之後。
如果我們遵循這個過程,那麼我們就不需要在每次交易提交的時候都把資料頁立即儲到磁碟,因為我們知道在出現崩潰的情況下, 我們可以用日誌來恢復資料庫:任何尚未附加到資料頁的記錄都將先從日誌記錄中重做(這叫向前滾動恢復,也叫做 REDO)。
(This is roll-forward recovery, also known as REDO.)
好處:
使用 WAL 的第一個主要的好處就是顯著地減少了磁盤寫的次數。 因為在日誌提交的時候只有日誌文件需要沖刷到磁盤;而不是交易修改的所有資料文件。 在多用戶環境裡,許多交易的提交可以用日誌文件的一次 fsync() 來完成。而且,日誌文件是順序寫的, 因此同步日誌的開銷要遠比同步資料頁的開銷要小。 這一點對於許多小交易修改資料儲存的許多不同的位置更是如此。
另外一個好處就是資料頁的完整性。
沒有留言:
張貼留言