Sql-Server

RAM 或物理文件中的事務日誌?

  • May 14, 2019

我是交易初學者,只是交易日誌上的一個問題。我們知道,當我們送出事務時,更改會寫入事務日誌,但事務日誌是在 RAM 中還是在物理文件中?如果它在 RAM 中並且當系統發生故障時,顯然 RAM 將被重新擦除,因此我們失去了事務資訊,那麼我們如何才能恢復送出呢?

您可以在此處找到有關此問題的非常全面的指南,但總而言之,SQL Server 不會將控制權返回給送出事務的應用程序,直到該事務已被硬化到磁碟。具體來說,一旦它被強化到事務日誌文件,就可以返回控制權。

此時的數據可能還沒有硬化到數據文件中,可能還在數據緩衝區記憶體中,但是因為已經硬化到事務日誌中然後數據庫恢復,一旦發生故障,可以恢復這個交易並安全地保存更改。

記憶體中有一個日誌緩衝區記憶體,用於減少對事務日誌的順序寫入對性能的影響。緩衝區在幾個條件下被刷新到磁碟,但其中一個是事務送出。在此數據被硬化之前,控制權不會返回給呼叫者,因此即使您在此緩衝區刷新期間出現故障,也會保持事務一致性,因為此事務尚未被視為已送出。您將失去該事務中的數據更改,但由於它沒有送出,您的應用程序已經認為這些更改失去了,因為送出從未完成。

一個數據庫由兩個文件組成,一個數據文件和一個事務日誌文件。這些儲存在磁碟上。

每個數據庫在 RAM 中都有一個日誌記憶體,當送出事務時,它會移動到日誌記憶體中等待刷新到磁碟。因此,當一個轉換已經送出並等待刷新到磁碟時,它暫時在記憶體中,但最終它儲存在文件中的磁碟上,而不是 RAM 中。

我在這裡過於簡單化了,我建議你閱讀事務日誌,我推薦這裡的 Paul Randals 講座之一

https://youtu.be/LvlFgxZZOj4

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