標籤:style http color io os ar strong sp 資料
基於效能方面的考慮, 資料庫引擎會在記憶體(buffer cache)中執行資料庫資料頁(pages)的修改, 不會再每次做完修改之後都把修改了的page寫回到磁碟上. 更準確的說, 資料庫引擎定期在每個資料庫上產生一個checkpoint. Checkpoint會把當前記憶體中的修改了的頁(dirty pages)還有transaction log的資訊從記憶體中寫入到磁碟, 還要記錄關於tranaction log的資訊.
資料庫引擎支援下面幾種checkpoint:
- automatic - 在後台定期自動產生checkpoint來達到伺服器配置所要求的recovery interval標準的時間上限. automatic checkpoint執行的多少是基於突出的寫操作的數量和資料庫引擎是否檢測到寫延遲超過了20毫秒來決定的.
- indirect - 在後台執行來讓某一個資料庫達到使用者指定的target revovery time標準. 預設的target revovery time是0, 這樣會引發automatic checkpoint設定在該資料庫上生效. 如果你之前用了ALTER DATABASE來配置TARGET_RECOVERY_TIME大於0了, 那麼這個大於0的值就會生效, 而不是讓針對server instance設定的該值起作用.
- manual - 每當你執行Transact-SQL中的CHECKPOINT命令時會產生manual 的checkpoint. manual checkpoint會在你當前串連了的資料庫上升小. 預設, manual checkpoint會執行一直到結束. Trrottling的工作機制跟automatic checkpoint是一樣的.
- internal - 會被許多伺服器操作引發, 比如說備份, 資料庫的快照(snapshot), 用以確保磁碟的鏡像跟當前的log的狀態保持一致.
舉例:
--啟用indirect checkpointALTER DATABASE tpce SET TARGET_RECOVERY_TIME = 1 SECONDSgo--啟用automatic checkpointALTER DATABASE tpce SET TARGET_RECOVERY_TIME = 0 SECONDSgo
參考資料
======================
Database Checkpoints (SQL Server)
http://msdn.microsoft.com/en-us/library/ms189573.aspx
SQL Server中的database checkpoint