程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 對SQL Server CheckPoint的常見理解誤區

對SQL Server CheckPoint的常見理解誤區

編輯:關於SqlServer

有關CheckPoint的概念對大多數SQL Server開發或DBA人員都不陌生。但是包括我自己在內,大家對於CheckPoint都或多或少存在某些誤區,最近和高文佳同學(感謝高同學的探討)關於該處進行過一些探討,整理出來幾個誤區。

1.CheckPoint實例級別,而不是數據庫級別

CheckPoint的時間雖然可以在實例級別進行設置,但CheckPoint的過程是以數據庫為粒度。從CheckPoint在Redo和Undo的作用來看,CheckPoint是為了優化IO和減少Recovery時間,而Recovery是需要日志支持,因此日志是數據庫級別的概念,因此可以知道CheckPoint是以數據庫為單位進行的。

我們來做一個簡單的實驗,分別設置兩個連接A和B,A和B使用不同的數據庫並修改數據產生髒數據,在A上進行了CheckPoint後,A連接的數據庫髒頁全部寫入磁盤,而B連接產生的髒頁依然駐留在Buffer中,因此可以確定CheckPoint是數據庫級別而不是服務器級別。

圖1.CheckPoint是數據庫級別的

2.由於日志增長導致的自動CheckPoint會將所有數據庫的髒頁寫入磁盤

事實證明,這也是錯誤的,自動CheckPoint僅僅會將某些髒頁或日志過多的數據庫髒頁寫入磁盤。可以同樣通過圖1的例子進行。

3.CheckPoint僅僅將已經提交的髒數據寫入磁盤

這同樣是錯誤的,無論事務是否提交,所產生的髒數據都會被CheckPoint寫入磁盤。例證可以參看我的博文:再談SQL Server中日志的的作用中有關CheckPoint的實驗。

4.如果一個實例上有多個數據庫,則CheckPoint是並行的

錯誤,通過3502跟蹤標記來看,CheckPoint是串行的,也就是一個數據庫CheckPoint完了才會繼續下一個。如圖2所示。

查看本欄目

圖2.串行CheckPoint

我們可以注意到,CheckPoint使用的是同一個Spid。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved