前面說到Recovery Interval可以控制SQL Server在內存中保留多少被修改的數據。其實我們有一個問題沒有講。
那就是內存中被修改的數據寫回到磁盤後,也就意味著磁盤中的數據版本和日志中的數據操作已經同步了。當然也就意味著如果這個時候系統崩潰了,SQL Server就不需要再恢復了。
不過如果真的這個時候崩潰了,那麼SQL Server怎麼知道這些日志操作的數據已經寫到磁盤了呢,所以SQL Server還有一個概念。
這個概念就是CheckPoint。
當SQL Server將一些被修改過的數據(術語叫Dirty Data)寫回到磁盤後(這個操作的術語叫Flush),SQL Server會在日志中留下一個標記,以表示這個標記前的數據已經都被寫到磁盤中了,而這個標記就叫做CheckPoint。
因此我們可以這麼說,CheckPoint代表著一次Flush操作。
SQL Server會在以下情況下觸發CheckPoint,也就是進行Flush:
SQL Server在正常停止服務的時候
日志中需要進行恢復的操作要花費超過Recovery Interval的時間時
SQL Server可用內存不足的情況下
管理員手動遞交CHECKPOINT命令的時候
當日志文件中的數據超過70%