CHECKPOINT (Transact-SQL)

將目前資料庫的所有中途分頁 (Dirty Page) 寫入磁碟中。「中途分頁」是已進入緩衝區快取中,也已修改過,但尚未寫入磁碟的資料頁面。藉由建立一個點來確保所有中途分頁都已寫入磁碟中,檢查點可讓稍後的復原節省時間。

主題連結圖示Transact-SQL 語法慣例

語法

CHECKPOINT [ checkpoint_duration ]

引數

  • checkpoint_duration
    指定所要求的檢查點作業完成的時間 (以秒為單位)。當指定 checkpoint_duration 時,SQL Server Database Engine 會嘗試在要求的持續時間內執行檢查點。checkpoint_duration 必須是 int 類型的運算式,且必須大於零。當省略這個參數時,SQL Server Database Engine 會自動調整檢查點持續時間,使資料庫應用程式受到的效能影響降到最低。

    [!附註]

    在 SQL Server 2000 中,檢查點處理序的時間範圍會以 sp_configure RECOVERY INTERVAL 設定為基礎。

備註

基於效能的考量,Database Engine 會修改記憶體中的資料庫頁面,但並不會在每次變更之後,將頁面寫入磁碟中。不過,Database Engine 必須定期執行檢查點,將這些中途分頁寫入磁碟中。將中途分頁寫入磁碟中,會建立一個已知的恰當起點,使 Database Engine 在發生非預期的關機或損毀之後,能夠從這裡開始套用復原期間包含在記錄中的變更。如需詳細資訊,請參閱<檢查點與記錄檔的使用中部份>。

檢查點可以同時出現在任意數目的資料庫中。

Database Engine 無法從中斷的檢查點進行復原。如果檢查點中斷,且需要復原,Database Engine 就必須從先前執行成功的檢查點開始復原。

引起檢查點的事件

在資料庫備份之前,Database Engine 會自動執行檢查點,使備份能夠包含資料庫頁面的所有變更。另外,當發生下列中的任何情況時,也會自動執行檢查點:

  • 記錄之使用中的部份,超出伺服器在 recoveryinterval 伺服器組態選項所指定的時間中,所能復原的大小。

  • 記錄已填滿 70%,資料庫處於記錄截斷模式中。

    當下面這兩個條件都是 TRUE 時,資料庫就會進入記錄截斷模式:資料庫在使用簡單復原模式,以及在執行參考資料庫的 BACKUP DATABASE 陳述式之後,發生下列事件之一:

    • 在資料庫中執行記錄最少的作業,例如,執行記錄最少的大量複製作業,或記錄最少的 WRITETEXT 陳述式。

    • 執行在資料庫中新增或刪除檔案的 ALTER DATABASE 陳述式。

另外,停止伺服器也會在伺服器的每個資料庫中發出檢查點。下列停止 SQL Server 的方法會執行每個資料庫的檢查點作業:

  • 使用 SQL Server 組態管理員。

  • 使用 SQL Server Management Studio。

  • 使用 SHUTDOWN 陳述式。

[!附註]

SHUTDOWN WITH NOWAIT 陳述式會關閉 SQL Server,但不會在每個資料庫中執行檢查點作業。這可能造成後來重新啟動時,在正常時間之外,花更多時間來復原伺服器中的資料庫。

  • 在 [命令提示字元] 視窗中,使用 net stop mssqlserver 命令。

  • 使用 [控制台] 中的 [服務],選取 [mssqlserver],再按一下 [停止]

  • 讓叢集中的執行個體離線。

影響檢查點作業持續時間的因素

一般而言,檢查點作業必須寫入的中途分頁數愈多,檢查點作業所需要的時間也會愈長。為了儘量避免影響其他應用程式的效能,依預設,SQL Server 會調整檢查點作業所執行的寫入頻率。在自動檢查點及未指定 checkpoint_duration 值的 CHECKPOINT 陳述式上,SQL Server 都會使用這個策略。降低寫入頻率會增加完成檢查點作業所需要的時間。

您可以利用 checkpoint_duration 來要求檢查點作業在特定時間之內完成。checkpoint_duration 對效能的影響,會隨著中途分頁數、系統活動數及所指定的實際持續時間而不同。例如,如果檢查點通常會在 120 秒之內完成,將 checkpoint_duration 指定為 45 秒,會使 SQL Server 用超出預設指派的資源數量來執行檢查點作業。相對地,將 checkpoint_duration 指定為 180 秒,會使 SQL Server 指派低於預設指派的資源數量。一般而言,checkpoint_duration 愈短,檢查點作業所花的資源愈多,checkpoint_duration 愈長,檢查點作業所花的資源愈少。可能的話,SQL Server 一律會完成檢查點作業,檢查點作業完成時,CHECKPOINT 陳述式會立即傳回。因此,在某些情況下,檢查點作業的完成會比指定的持續時間快,執行時間也有可能超出指定的持續時間。

權限

CHECKPOINT 權限預設會授與系統管理員 (sysadmin) 固定伺服器角色以及 db_ownerdb_backupoperator 固定資料庫角色的成員,這些權限不能轉讓。