?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
預(yù)寫式日志(WAL) 是一種實(shí)現(xiàn)事務(wù)日志的標(biāo)準(zhǔn)方法。有關(guān)它的詳細(xì)描述可以在大多數(shù)(如果不是全部的話) 有關(guān)事務(wù)處理的書中找到。簡(jiǎn)而言之,WAL 的中心思想 是對(duì)數(shù)據(jù)文件的修改(它們是表和索引的載體)必須是只能發(fā)生在這些修改已經(jīng)記錄到日志之后, 也就是說(shuō),在描述這些變化的日志記錄刷新到永久存儲(chǔ)器之后。如果我們遵循這個(gè)過(guò)程, 那么就不需要在每次事務(wù)提交的時(shí)候都把數(shù)據(jù)頁(yè)刷新到磁盤,因?yàn)樵诔霈F(xiàn)崩潰的情況下 可以用日志來(lái)恢復(fù)數(shù)據(jù)庫(kù):任何尚未附加到數(shù)據(jù)頁(yè)的記錄都將先從日志記錄中重做 (這叫向前滾動(dòng)恢復(fù),也叫REDO)。
Tip: 因?yàn)?acronym class="ACRONYM">WAL在數(shù)據(jù)庫(kù)崩潰后會(huì)保存數(shù)據(jù)庫(kù)文件內(nèi)容, 所以日志文件系統(tǒng)沒(méi)有必要完全保存數(shù)據(jù)庫(kù)文件或WAL文件。 事實(shí)上,日志開(kāi)啟會(huì)降性能,特別是在當(dāng)日志記錄引起系統(tǒng)數(shù)據(jù) 被寫入到磁盤時(shí)。幸運(yùn)的是,在當(dāng)可以通過(guò)一個(gè)文件掛載選項(xiàng)關(guān)閉時(shí), 數(shù)據(jù)才會(huì)刷新,例如,data=writeback在Linux的ext3文件系統(tǒng)。 在崩潰后,日志系統(tǒng)能夠提高啟動(dòng)速度。
使用 WAL 的第一個(gè)主要的好處就是顯著地減少了磁盤寫的次數(shù)。
因?yàn)樵谌罩咎峤坏臅r(shí)候只有日志文件需要刷新到磁盤以保證交易承諾,而不是事務(wù)修改的所有數(shù)據(jù)文件。
日志文件是順序?qū)懙模酝饺罩镜拈_(kāi)銷要遠(yuǎn)比同步數(shù)據(jù)頁(yè)的開(kāi)銷小。
對(duì)于許多小事務(wù)修改數(shù)據(jù)存儲(chǔ)的許多不同位置更是如此。
此外,當(dāng)服務(wù)器正在處理許多小并發(fā)交易,一個(gè)fsync
可
足以提交許多交易。
WAL 還提供了數(shù)據(jù)庫(kù)在線備份和恢復(fù)的可能, 就像Section 24.3里描述的那樣。 通過(guò)歸檔的 WAL 文件,可以將數(shù)據(jù)庫(kù)恢復(fù)到 WAL 文件包含的任意時(shí)刻: 只需要簡(jiǎn)單地安裝以前的數(shù)據(jù)庫(kù)物理備份,然后重放 WAL 到希望的時(shí)間點(diǎn)。 另外,物理備份還不必是數(shù)據(jù)庫(kù)狀態(tài)的一個(gè)即時(shí)快照(如果其制作花了較長(zhǎng)時(shí)間的話), 因?yàn)?WAL 日志的重放將修復(fù)任何內(nèi)部的不一致。