Sql-Server-2014

日誌文件是否同時包含已送出和未送出的事務?

  • August 28, 2019

我的問題與 SQL Server 體系結構有關。主要是日誌文件。在下圖中,當事務送出時,LOG CACHE 中的日誌記錄將被移動到日誌文件中。這是否意味著日誌文件僅包含已送出的事務?

一些站點還聲明,當 COMMIT 發生時,臟頁首先從 BUFFER CACHE 移動到 LOG CACHE,然後再移動到日誌文件中。所以我不明白 COMMIT 發生時會發生什麼。我將不勝感激。

在此處輸入圖像描述

SQL Server 使用預寫日誌記錄,因此更改(已送出或未送出)始終先寫入日誌文件,然後再寫入任何數據文件。

寫入事務日誌的記錄不一定反映正在修改的整個頁面。日誌記錄通常由補償數據組成,這些數據允許事務前滾和後滾。 COMMIT刷新日誌緩衝區以及送出記錄以保證持久性。請參閱文件

除了送出之外,日誌緩衝區在它們變滿時以及在檢查點操作期間會被刷新。日誌可能包含未送出的事務,事務執行多長時間並不重要。在崩潰恢復期間,從最後完成的檢查點開始的所有事務都從日誌記錄中前滾,然後回滾未送出的事務。然後數據庫是一致的,只包含已送出的事務。

以上內容由Dan Guzman的評論轉換而來

引用自:https://dba.stackexchange.com/questions/246161