預(yù)寫式日志(Write-Ahead Logging (WAL))
WAL 的好處使用 WAL 的第一個(gè)主要的好處就是顯著地減少了磁盤寫的次數(shù)。 因?yàn)樵谌罩咎峤坏臅r(shí)候只有日志文件需要沖刷到磁盤;而不是事務(wù)修改的所有數(shù)據(jù)文件。 在多用戶環(huán)境里,許多事務(wù)的提交可以用日志文件的一次 fsync() 來(lái)完成。而且,日志文件是順序?qū)懙模?因此同步日志的開銷要遠(yuǎn)比同步數(shù)據(jù)頁(yè)的開銷要小。 這一點(diǎn)對(duì)于許多小事務(wù)修改數(shù)據(jù)存儲(chǔ)的許多不同的位置更是如此。 另外一個(gè)好處就是數(shù)據(jù)頁(yè)的完整性。實(shí)際情況是,在 WAL 之前,PostgreSQL 從來(lái)不能保證在崩潰的情況下數(shù)據(jù)頁(yè)的完整性。 在 WAL 之前,在寫的過程中的任何崩潰都可能導(dǎo)致:
索引的問題(問題 1 和 2)可能已經(jīng)通過額外的 fsync 調(diào)用修補(bǔ)好了,但是如果沒有 WAL,那么沒有很明顯的處理第三種情況的方法; WAL 在日志里保存整個(gè)數(shù)據(jù)頁(yè)的內(nèi)容 -- 如果那些內(nèi)容在崩潰后的恢復(fù)中需要確保數(shù)據(jù)頁(yè)的完整性的話。 最后,WAL 還提供了數(shù)據(jù)庫(kù)在線備份和恢復(fù)(backup and restore (BAR))的可能, 就像 Section 22.3 里描述的那樣。 通過歸檔的 WAL 文件,我們可以支持恢復(fù)到手頭的 WAL 文件包含的任意時(shí)刻: 我們只需要簡(jiǎn)單地安裝以前的數(shù)據(jù)庫(kù)的物理備份,然后重放 WAL 到自己希望的時(shí)間。 另外,物理備份還不必是數(shù)據(jù)庫(kù)狀態(tài)的一個(gè)即時(shí)快照 — 如果它是花了一段時(shí)間制作的話, 因?yàn)?WAL 日志的重放將修復(fù)任何內(nèi)部的不一致。 |
|
|
來(lái)自: 風(fēng)自向前 > 《設(shè)計(jì)模式》