關於檢查點的解釋:
出於性能方面的考慮,數據庫引擎對內存(緩沖區緩存)中的數據庫頁進行修改,但在每次更改后不將這些頁寫入磁盤。相反,數據庫引擎定期發出對每個數據庫的檢查點命令。“檢查點”將當前內存中已修改的頁(稱為“臟頁”)和事務日志信息從內存寫入磁盤,並記錄有關事務日志的信息。
數據庫引擎支持幾種類型的檢查點:自動、間接、手動和內部。下表總結了檢查點類型。
1:自動
2:手動設置后就會間接發生
上圖將檢查點設置為2分鍾發生一次,兩分鍾將會自動執行檢查點.
3:手動
4:內部:由各種服務器操作(如備份和數據庫快照創建)發出,以確保磁盤映像與日志的當前狀態匹配。
A:已經使用 ALTER DATABASE 添加或刪除了數據庫文件。
進行了數據庫備份。
B:創建了數據庫快照,不管 DBCC CHECK 是顯式還是內部執行。
C:執行了需要關閉數據庫的活動。例如,AUTO_CLOSE 設置為 ON 並且關閉了數據庫的最后一個用戶連接,或者執行了需要重新啟動數據庫的數據庫選項更改。
D:通過停止 SQL Server (MSSQLSERVER) 服務停止了 SQL Server 實例。任一操作都會在 SQL Server 實例的每個數據庫中生成一個檢查點。
E:使 SQL Server 故障轉移群集實例 (FCI) 脫機
當發生以上操作的時候,數據庫檢查點將會自動發生.
我們可以想象,當檢查點頻繁發生的時候,就會造成IO的讀寫頻繁,這樣不但不能夠提高效率,相反還會降低,而且還會影響磁盤的壽命.所以檢查點的機制還是很有作用的.
當檢查點發生的時候,他會對sqlserver的緩沖區的所有臟頁進行處理,寫入磁盤文件,當然有一些修改的事物是沒有commit的,但是還是會被寫入到數據文件當中,發生IO寫,所以說,這個機制其實就是把臟數據寫入磁盤,而不管你的數據是有沒有提交.未提交的數據就在后期會做UNDO將事物回滾,