SQL Server 完整備份遇到的一個不常見的錯誤

1. 錯誤詳情

有一次在手動執行數據庫完整備份時遇到以下錯誤:數據庫

執行屢次都是這個錯誤信息。緩存

提示沒法生成檢查點,緣由多是因爲系統資源(如磁盤或內存空間)不足或者有時是因爲數據庫損壞而形成的。服務器

咱們檢查數據庫資源能夠排除磁盤資源不足的狀況。性能

 2.檢查點相關知識

 事務日誌、數據文件 和 checkpoint的關係。日誌

在SQL Server中,進行insert, update, delete時,數據並無直接寫入數據庫對應的mdf文件中,而是寫入了緩存裏, 這時,就要提到一個很是重要機制:CheckPoint,它主要做用是把緩存中的數據寫入mdf文件中。blog

能夠用下面的這個經典圖來講明:事件

 

3.觸發CheckPoint檢查點的事件

1.在數據庫備份以前,數據庫引擎會自動執行檢查點,以便在備份中包含對數據庫頁的所有更改。事務

2.日誌的活動部分超出了服務器在 recovery interval 服務器配置選項中指定的時間內能夠恢復的大小。內存

3.日誌的 70% 已滿,而且數據庫處於日誌截斷模式。資源

4.中止服務器也會在服務器上的每一個數據庫中發出一個檢查點命令。

4.手動執行檢查點

因此這個錯誤極可能就是備份時出現了檢查點的問題,那麼咱們手動執行一次檢查點。

一般,咱們不多須要手動執行checkpoint指令,checkpoint的語法爲 :CHECKPOINT [ checkpoint_duration ],checkpoint_duration 爲完成該checkppoint所需的秒數。
正常狀況下,咱們不會指定checkpoint_duration 該值,而是用數據庫自動調整的檢查點持續時間,以下降對數據庫的性能影響。
由於數據庫在執行checkpoint的時候,髒頁數、修改數據的活動事務以及指定實際持續時間checkpoint_duration,都會影響資源的分配狀況,假設指定了checkpoint_duration的值爲50s,而正常狀況下完成這個操做須要150s,那麼這個時候,數據庫爲了知足指定的checkpoint_duration 50s,就會比正常狀況下,分配更多的資源給該指令運行,那麼就會影響到正常狀況下的其餘操做對資源的利用了。

5.效果驗證

運行了一下checkpoint 好了。

嘻嘻

相關文章
相關標籤/搜索