SQL Server中的Recovery Interval

其實有很多朋友都問到過Recovery Interval,有問這個是幹嗎的,有問怎麼調節這個值,所以今天寫一篇小Blog,一勞永逸。

衆所周知,SQL Server依靠Log來保證性能和數據持久性兩不耽擱。那麼我們來看一看SQL Server是如何處理我們的數據修改請求的。

首先我們的客戶端將數據修改指令遞交到SQL Server,SQL Server就會通過一系列的過程把數據從物理磁盤上讀取到內存中。

數據被讀取到內存中後,SQL Server會在內存中修改數據。當然大家就會想到,修改完了是不是要立即寫回到磁盤上呢?如果寫回去,那麼勢必會影響性能,如果不寫,那麼萬一系統崩潰了修改就會丟失,這一切就像我們在用WORD寫文檔一樣。

SQL Server沒有采用這兩種笨辦法,SQL Server知道大多數情況下,大多數數據被訪問後一段時間內都會再次被訪問,因此SQL Server決定將數據保留在內存中。不過,如果這個時候系統崩潰了怎麼辦,又或者系統掉電了怎麼辦呢?SQL Server採用了一種變通的辦法,它將修改操作寫到了另外一個文件中去,這個文件叫做日誌。

那麼SQL Server就像這樣,我們每修改一個數據,SQL Server都會把這個數據寫到日誌文件中去。如果系統崩潰了,SQL Server只要從這個日誌文件中就可以知道我們執行了哪些操作,我們只要把這些操作再做一遍就可以恢復數據了。

好像我們沒有講到Recovery Interval麼。

是的,就要來了。雖然上面說的辦法不錯,不過那些修改過的數據不能一直放在內存中。除了內存是有限的之外,還有一個重要的原因,那就是SQL Server不能僅僅依賴日誌來保證數據的一致性。

SQL Server通常都會運行數個月之久而不重新啓動,這可不像我們用的筆記本。那麼如果它運行了三個月後突然崩潰了,天哪!難道我們要把三個月的操作重新做一遍?!當然不能這樣,Recovery Interval會控制這一切!

Recovery Interval會告訴SQL Server,如果要通過日誌裏面的操作進行恢復不能超過多少時間。那麼SQL Server就會看好這一切,當它發現日誌裏面的新的操作需要超過Recovery Interval的時間進行恢復的時候,SQL Server就像強制將內存那些被修改過的數據寫回到磁盤裏面去。

這樣我們就不用重新執行那三個月的操作了,通常都是短短的5分鐘,因爲默認Recovery Interval是5分鐘。

那麼我們怎麼調節這個值呢?

Recovery Interval的值越長,那麼也就意味着萬一我們的系統崩潰了,我們就需要更長的時間進行恢復,不過也就以爲那些被修改過的數據可以在內存中停留更長的時間,也就意味着我們可以寫磁盤寫的更少一些。

相反,如果Recovery Interval的值約短,那麼也就意味着萬一我們的系統崩潰了,我們就需要恢復的時間就更短,另外一方面也就意味着我們可以寫磁盤寫的更頻繁一些。


 下面的示例將系統恢復間歇設爲 3 分鐘。

USE master0
EXEC sp_configure 'recovery interval', '3'
RECONFIGURE WITH OVERRIDE

recovery interval 是一個高級選項。如果要使用 sp_configure 系統存儲過程改變該設置,必須把 show advanced options 設置爲 1,該選項立即生效(無需服務器停止並重新啓動)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章