當前位置:
首頁 >
SQL Server CheckPoint的几个误区
發(fā)布時間:2025/5/22
35
豆豆
生活随笔
收集整理的這篇文章主要介紹了
SQL Server CheckPoint的几个误区
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
有關(guān)CheckPoint的概念對大多數(shù)SQL Server開發(fā)或DBA人員都不陌生。但是包括我自己在內(nèi),大家對于CheckPoint都或多或少存在某些誤區(qū),最近和高文佳同學(感謝高同學的探討)關(guān)于該處進行過一些探討,整理出來幾個誤區(qū)。
1.CheckPoint實例級別,而不是數(shù)據(jù)庫級別
CheckPoint的時間雖然可以在實例級別進行設(shè)置,但CheckPoint的過程是以數(shù)據(jù)庫為粒度。從CheckPoint在Redo和Undo的作用來看,CheckPoint是為了優(yōu)化IO和減少Recovery時間,而Recovery是需要日志支持,因此日志是數(shù)據(jù)庫級別的概念,因此可以知道CheckPoint是以數(shù)據(jù)庫為單位進行的。
我們來做一個簡單的實驗,分別設(shè)置兩個連接A和B,A和B使用不同的數(shù)據(jù)庫并修改數(shù)據(jù)產(chǎn)生臟數(shù)據(jù),在A上進行了CheckPoint后,A連接的數(shù)據(jù)庫臟頁全部寫入磁盤,而B連接產(chǎn)生的臟頁依然駐留在Buffer中,因此可以確定CheckPoint是數(shù)據(jù)庫級別而不是服務(wù)器級別。
1
圖1.CheckPoint是數(shù)據(jù)庫級別的
2.由于日志增長導致的自動CheckPoint會將所有數(shù)據(jù)庫的臟頁寫入磁盤
事實證明,這也是錯誤的,自動CheckPoint僅僅會將某些臟頁或日志過多的數(shù)據(jù)庫臟頁寫入磁盤。可以同樣通過圖1的例子進行。
3.CheckPoint僅僅將已經(jīng)提交的臟數(shù)據(jù)寫入磁盤
這同樣是錯誤的,無論事務(wù)是否提交,所產(chǎn)生的臟數(shù)據(jù)都會被CheckPoint寫入磁盤。例證可以參看我的博文:再談SQL Server中日志的的作用中有關(guān)CheckPoint的實驗。
4.如果一個實例上有多個數(shù)據(jù)庫,則CheckPoint是并行的
錯誤,通過3502跟蹤標記來看,CheckPoint是串行的,也就是一個數(shù)據(jù)庫CheckPoint完了才會繼續(xù)下一個。如圖2所示。
2
圖2.串行CheckPoint
我們可以注意到,CheckPoint使用的是同一個Spid。
5.將恢復間隔設(shè)置為1分鐘,意味著每1分鐘會對所有的數(shù)據(jù)庫做一次CheckPoint
錯誤。將恢復間隔設(shè)置為1分鐘不能想成建立一個Agent,每分鐘寫一個CheckPoint命令,這是兩碼事。這只是意味著每分鐘去檢查一次是否需要做CheckPoint,如果期間積累的日志量足夠,才會對積累足夠日志量的數(shù)據(jù)庫去做CheckPoint。即使中間積累了巨量的日志,不到1分鐘也不會做CheckPoint。
6.SQL Server一些Internal CheckPoint時,比如說關(guān)閉數(shù)據(jù)庫,會對所有數(shù)據(jù)庫做CheckPoint(高同學補充)
這條是正確的微笑,因為SQL Server此時需要保證所有的數(shù)據(jù)寫入磁盤,從而保證了數(shù)據(jù)庫一致性,如果沒有活動的事務(wù),那么這種關(guān)閉方式叫做Clean ShutDown,這意味著該數(shù)據(jù)本身一致,因此即使沒有日志,MDF也可以附加。
7.CheckPoint是一個時間點(高同學補充)
錯誤,這是打游戲存檔的想法,從哪存進度,從哪取進度,是某個時間點。在SQL Server中,CheckPoint是一個完整的過程,這個過程的耗時取決于臟數(shù)據(jù)的大小,更多資料,請參閱MSDN:http://technet.microsoft.com/zh-cn/library/ms188748.aspx
8.引發(fā)自動CheckPoint的條件是內(nèi)存中臟頁的多少(高同學補充)
錯誤,CheckPoint的觸發(fā)條件,是在CheckPoint期間生成日志的大小。因此,大家見過內(nèi)存中有很多臟頁,卻不引發(fā)CheckPoint的情況。
9.當數(shù)據(jù)所在磁盤壓力大時,通過checkpoint pages/ sec 計數(shù)器來觀察寫入磁盤的臟頁(高同學補充)
部分正確。實際上,臟頁被寫入磁盤一共有3中方式,CheckPoint僅僅是其中一種,我們還需要將Lazy writes/sec考慮在內(nèi)。
10.TempDB上永遠不會寫入臟頁
錯誤。TempdB是一個特殊的數(shù)據(jù)庫,永遠只能簡單恢復模式,如果您在TempDB上造成大量臟頁,自動CheckPoint時會發(fā)現(xiàn)的確不會有任何臟頁寫入操作,但手動CheckPoint時,臟頁依然會被寫入磁盤。
最后,再次感謝高文佳同學和我探討。
本文轉(zhuǎn)自CareySon博客園博客,原文鏈接:http://www.cnblogs.com/CareySon/p/3315041.html如需轉(zhuǎn)載請自行聯(lián)系原作者
1.CheckPoint實例級別,而不是數(shù)據(jù)庫級別
CheckPoint的時間雖然可以在實例級別進行設(shè)置,但CheckPoint的過程是以數(shù)據(jù)庫為粒度。從CheckPoint在Redo和Undo的作用來看,CheckPoint是為了優(yōu)化IO和減少Recovery時間,而Recovery是需要日志支持,因此日志是數(shù)據(jù)庫級別的概念,因此可以知道CheckPoint是以數(shù)據(jù)庫為單位進行的。
我們來做一個簡單的實驗,分別設(shè)置兩個連接A和B,A和B使用不同的數(shù)據(jù)庫并修改數(shù)據(jù)產(chǎn)生臟數(shù)據(jù),在A上進行了CheckPoint后,A連接的數(shù)據(jù)庫臟頁全部寫入磁盤,而B連接產(chǎn)生的臟頁依然駐留在Buffer中,因此可以確定CheckPoint是數(shù)據(jù)庫級別而不是服務(wù)器級別。
1
圖1.CheckPoint是數(shù)據(jù)庫級別的
2.由于日志增長導致的自動CheckPoint會將所有數(shù)據(jù)庫的臟頁寫入磁盤
事實證明,這也是錯誤的,自動CheckPoint僅僅會將某些臟頁或日志過多的數(shù)據(jù)庫臟頁寫入磁盤。可以同樣通過圖1的例子進行。
3.CheckPoint僅僅將已經(jīng)提交的臟數(shù)據(jù)寫入磁盤
這同樣是錯誤的,無論事務(wù)是否提交,所產(chǎn)生的臟數(shù)據(jù)都會被CheckPoint寫入磁盤。例證可以參看我的博文:再談SQL Server中日志的的作用中有關(guān)CheckPoint的實驗。
4.如果一個實例上有多個數(shù)據(jù)庫,則CheckPoint是并行的
錯誤,通過3502跟蹤標記來看,CheckPoint是串行的,也就是一個數(shù)據(jù)庫CheckPoint完了才會繼續(xù)下一個。如圖2所示。
2
圖2.串行CheckPoint
我們可以注意到,CheckPoint使用的是同一個Spid。
5.將恢復間隔設(shè)置為1分鐘,意味著每1分鐘會對所有的數(shù)據(jù)庫做一次CheckPoint
錯誤。將恢復間隔設(shè)置為1分鐘不能想成建立一個Agent,每分鐘寫一個CheckPoint命令,這是兩碼事。這只是意味著每分鐘去檢查一次是否需要做CheckPoint,如果期間積累的日志量足夠,才會對積累足夠日志量的數(shù)據(jù)庫去做CheckPoint。即使中間積累了巨量的日志,不到1分鐘也不會做CheckPoint。
6.SQL Server一些Internal CheckPoint時,比如說關(guān)閉數(shù)據(jù)庫,會對所有數(shù)據(jù)庫做CheckPoint(高同學補充)
這條是正確的微笑,因為SQL Server此時需要保證所有的數(shù)據(jù)寫入磁盤,從而保證了數(shù)據(jù)庫一致性,如果沒有活動的事務(wù),那么這種關(guān)閉方式叫做Clean ShutDown,這意味著該數(shù)據(jù)本身一致,因此即使沒有日志,MDF也可以附加。
7.CheckPoint是一個時間點(高同學補充)
錯誤,這是打游戲存檔的想法,從哪存進度,從哪取進度,是某個時間點。在SQL Server中,CheckPoint是一個完整的過程,這個過程的耗時取決于臟數(shù)據(jù)的大小,更多資料,請參閱MSDN:http://technet.microsoft.com/zh-cn/library/ms188748.aspx
8.引發(fā)自動CheckPoint的條件是內(nèi)存中臟頁的多少(高同學補充)
錯誤,CheckPoint的觸發(fā)條件,是在CheckPoint期間生成日志的大小。因此,大家見過內(nèi)存中有很多臟頁,卻不引發(fā)CheckPoint的情況。
9.當數(shù)據(jù)所在磁盤壓力大時,通過checkpoint pages/ sec 計數(shù)器來觀察寫入磁盤的臟頁(高同學補充)
部分正確。實際上,臟頁被寫入磁盤一共有3中方式,CheckPoint僅僅是其中一種,我們還需要將Lazy writes/sec考慮在內(nèi)。
10.TempDB上永遠不會寫入臟頁
錯誤。TempdB是一個特殊的數(shù)據(jù)庫,永遠只能簡單恢復模式,如果您在TempDB上造成大量臟頁,自動CheckPoint時會發(fā)現(xiàn)的確不會有任何臟頁寫入操作,但手動CheckPoint時,臟頁依然會被寫入磁盤。
最后,再次感謝高文佳同學和我探討。
本文轉(zhuǎn)自CareySon博客園博客,原文鏈接:http://www.cnblogs.com/CareySon/p/3315041.html如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的SQL Server CheckPoint的几个误区的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: htmltest~计算器界面的实现
- 下一篇: SQL优化常用方法41