2017-01-30 221 views
1

在哪些情況下將T日誌從日誌高速緩存刷新到日誌文件或磁盤?將事務日誌刷新到日誌文件中的條件

這是否發生在每次提交之後或每隔3秒或僅在檢查點之後?

並且當內存不足以容納緩衝池中的數據(在臨時數據庫或各個數據庫中)時,髒頁面存儲在SQL服務器中的位置?以及未提交的數據在SQL服務器中保存多久以及在哪裏?

回答

0

Checkp oint是一個內部進程,它將緩衝區緩存中的所有髒頁(修改頁)寫入物理磁盤,除此之外,它還將日誌記錄從日誌緩衝區寫入物理文件。

檢查點始終寫出自上次檢查點以來已更改的所有頁面(稱爲已標記爲髒)或從磁盤讀入頁面後的所有頁面。無論改變頁面的事務是否提交 - 頁面寫入磁盤都是無關緊要的。唯一的例外是tempdb,其中數據頁面不作爲檢查點的一部分寫入磁盤。

當tempdb日誌文件達到70%滿時,檢查點僅針對tempdb執行 - 這是爲了防止tempdb日誌儘可能增長(請注意,長時間運行的事務仍然可以基本上保持日誌爲人質並且阻止它清除,就像在用戶數據庫中一樣)。

條件時,事務日誌刷新到日誌文件:

的日誌寫的是過程,負責從日誌緩存日誌寫入日誌文件。

其中日誌緩衝區刷新到磁盤的條件包括:

  1. 會話發出提交或回滾命令。
  2. 日誌緩衝區變爲1/3滿。
  3. 在每個檢查點之後。
  4. 每當日誌文件變爲70%滿時。
  5. 這也取決於Target Recovery Time

或是否發生一次提交之後每3秒後或僅 檢查點之後?

它發生在每次提交後和每個檢查點之後。

檢查點出現在用戶數據庫中,該數據庫的所有髒頁都被刷新到磁盤(以及其他操作)。這不會發生在tempdb上。 Tempdb在發生崩潰時不會被恢復,因此除了懶惰寫入進程(緩衝池的一部分)必須爲來自其他數據庫的頁面留出空間的情況外,不需要強制將髒tempdb頁面強制到磁盤。當您發出手冊 CHECKPOINT時,所有髒頁面都會被刷新,但對於自動檢查點而言,它們不是。

Checkpoints

多久提交的數據是SQL Server和地方保存?

SQL Server會將未提交的數據保留在數據和日誌文件中,除非和直到事務完成/回滾。

+0

我想問一個問題並重寫你的得到所有澄清後的回答不會給人留下好印象 – TheGameiswar

0

你問兩個隨機問題

1.Transaction日誌緩衝區
2.Buffer池

在什麼條件下T-日誌從日誌高速緩存刷新到日誌文件或磁盤?它是在每次提交後還是每隔3秒後或者在檢查點之後發生?

考慮下面的更新語句

Update table set id=1 
where id=2 

所有這些修改被寫入事務日誌buffer..SQLServer首先然後寫入此修改到磁盤之前,我們得到全成commit..This被稱爲預寫記錄和這種類型的提交不會定期或任何thing..This每條語句

而且在發生在髒頁都存儲在SQL服務器時內存不夠大持有該數據BU (在臨時數據庫或各個數據庫中)?以及未提交的數據在SQL服務器中保存多久以及在哪裏?

考慮相同的更新交易,此更新需要撫摸三pages..and一個頁面不在緩衝區pool..In這種情況下,SQL從磁盤讀取,並將其放置在頁面緩衝池和修改它..Now這個頁面被稱爲髒頁...

這些類型的頁面將被刷新到磁盤,如果檢查點occurs..check點的發生是由於下面的鏈接中提到的各種條件

https://msdn.microsoft.com/en-us/library/ms189573.aspx

+0

檢查點將刷新一切,無論是已提交還是未提交,因爲此事務寫入日誌文件..SQLServer將從中讀取,在最壞的情況下 – TheGameiswar

+0

謝謝.. TheGameiswar –