預先寫入交易記錄

本主題將描述預先寫入交易記錄在將資料修改記錄至磁碟時所扮演的角色。如需有關交易記錄的基本資訊,請參閱<交易記錄檔概觀>。

SQL Server 會使用預先寫入記錄 (WAL),而這項功能可確保在關聯的記錄檔記錄寫入磁碟之前,不會有任何資料修改寫入磁碟。如此可保留交易的 ACID 屬性。如需交易與 ACID 屬性的詳細資訊,請參閱<交易 (Database Engine)>。

若要了解預先寫入記錄如何運作,您一定要知道已修改的資料是如何寫入磁碟中。SQL Server 會維護一個緩衝區快取,當必須擷取資料時,它會將資料讀入此處。資料修改並不會直接對磁碟進行,而是先修改緩衝區快取的分頁副本。直到資料庫中發生檢查點時,修改才會寫入磁碟,或是為了使緩衝區可用來儲存新分頁,才必須將修改寫入磁碟。將緩衝區快取中之修改資料頁面寫入磁碟中的動作稱為清除頁面。快取中已修改但尚未寫入磁碟的頁面就稱為「中途分頁」。

對緩衝區的某個分頁進行修改時,記錄檔記錄會建立於記錄檔快取之中,以記錄該項修改。此記錄檔資料錄必須在關聯的中途分頁從緩衝區快取清除至磁碟之前,先寫入磁碟中。如果中途分頁在寫入記錄之前即被清除,而且伺服器在記錄檔記錄寫入磁碟之前就已故障,則中途分頁將在磁碟中建立一個無法回復的修改。SQL Server 含有可防止中途分頁在相關聯記錄檔記錄寫入之前遭到清除的邏輯。記錄會在交易被認可後寫入磁碟中。

[!附註]

某些 IDE SATA 磁碟機快取資料會先寫入內部記憶體,然後再將資料寫入磁碟。不過,這樣做會讓預先寫入記錄無法正常運作。如果正在執行 SQL Server 的電腦使用其中一種磁碟類型,您就應該啟用 enable_force_flush 選項。