檢查點與記錄檔的使用中部份
檢查點可從目前資料庫的緩衝區快取將中途 (Dirty) 資料頁排清至磁碟。這可將資料庫完整復原必須處理的記錄部分減至最少。在完整復原時,將執行下列動作類型:
- 在系統停止之前,尚未排清至磁碟的修改記錄會向前復原。
- 未完成之交易 (例如,未包含 COMMIT 或 ROLLBACK 記錄的交易) 所關聯的所有修改都必須回復。
檢查點作業
檢查點將在資料庫中執行下列處理序:
- 將記錄寫入記錄檔,並標示檢查點的起點。
- 儲存記錄於檢查點記錄鏈結中的檢查點資訊。
記錄於檢查點的某項資訊是必須出現於成功回復全資料庫中之第一筆記錄檔記錄的記錄序號 (LSN)。此 LSN 就稱為「最小復原 LSN」(MinLSN)。MinLSN 是下列項目的最小值:- 檢查點起點的 LSN。
- 最舊使用中交易之起點的 LSN。
- 尚未傳遞至散發資料庫之最舊複寫交易起點的 LSN。
檢查點的記錄還包含已經修改資料庫之所有使用中交易的清單。
- 如果資料庫使用簡單復原模式,就會將 MinLSN 前面的空間標示為可重複使用。
- 將所有中途 (Dirty) 記錄與資料頁寫入磁碟之中。
- 將標示檢查點終點的記錄寫入記錄檔中。
- 將此鏈結起點的 LSN 寫入資料庫開機頁面中。
產生檢查點的活動
在下列情況下會產生檢查點:
- 明確執行 CHECKPOINT 陳述式。在連接的目前資料庫中發生檢查點。
- 在資料庫中執行最基本的登入作業;例如,在使用大量記錄復原模式的資料庫中執行大量復製作業。
- 使用 ALTER DATABASE 加入或移除資料庫檔。
- 以 SHUTDOWN 陳述式或透過停止 SQL Server (MSSQLSERVER) 服務來停止 SQL Server 執行個體。任何一項動作都會導致在 SQL Server 執行個體的每個資料庫中產生檢查點。
- SQL Server 執行個體會定期在每個資料庫中產生自動檢查點,以減少執行個體需要復原資料庫的時間。
- 採用資料庫備份。
- 需要執行資料庫關閉的活動。例如,AUTO_CLOSE 為 ON,且上次使用者對於資料庫的連接已經關閉,或是已變更資料庫選項,因此需要重新啟動資料庫。
自動檢查點
SQL Server Database Engine會產生自動檢查點。自動檢查點之間的間隔,是根據所使用的記錄空間量以及自上個檢查點後所經過的時間而設置。如果資料庫只做了一些修改,自動檢查點之間的時間間隔可能會有很多變化且很長。如果修改了許多資料,自動檢查點就會經常發生。
請使用 [復原間隔] 伺服器組態選項,針對伺服器執行個體上的所有資料庫,計算自動檢查點之間的間隔。此選項指定了Database Engine在系統重新啟動的過程中,用來復原資料庫的時間上限。Database Engine將估計它在復原作業的 [復原間隔] 中可處理多少記錄。
自動檢查點之間的間隔也是取決於復原模式:
- 若資料庫使用完整復原模式或大量記錄復原模式,每次記錄達到 Database Engine 可在「復原間隔」選項指定之時間內處理的數目時,就會產生自動檢查點。
- 若資料庫使用的是簡單復原模式,每次當記錄的數目到達下列兩個數值的較小者時,就會產生一個自動檢查點:
- 記錄填滿百分之 70 時。
- 記錄的數目到達 Database Engine 估計可在「復原間隔」選項指定之時間內處理的數目時。
如需設定復原間格的詳細資訊,請參閱<如何:設定復原間隔 (SQL Server Management Studio)>。
若資料庫使用的是簡單復原模式,自動檢查點將截斷交易記錄的未使用部分。然而,如果資料庫使用的是完整或大量記錄復原模式,自動檢查點將不會截斷記錄。如需詳細資訊,請參閱<交易記錄截斷>。
CHECKPOINT 陳述式現在提供一個選擇性的 checkpoint_duration 引數,指定完成檢查點之要求的時間週期 (以秒為單位)。如需詳細資訊,請參閱<CHECKPOINT (Transact-SQL)>。
使用中的記錄
從 MinLSN 到最後寫入之記錄的記錄檔部分,稱為記錄的使用中部分,或是*「使用中的記錄」*。這是需要進行完整資料庫復原的記錄部分。沒有任何使用中的記錄部分可被截斷。所有的記錄截斷動作必須發生於 MinLSN 之前的記錄部分。
下圖將顯示包含兩個使用中交易之交易記錄檔結尾的簡化版本。檢查點記錄已被壓縮成一個記錄。
LSN 148 是交易記錄中最後一個記錄。當記錄於 LSN 147 的檢查點經過處理之後,將會認可 Tran 1,而 Tran 2 將成為唯一的使用中交易。這會使得 Tran 2 的第一個記錄成為最後檢查點之使用中交易的最早記錄。這可讓 LSN 142,也就是 Tran 2 的 Begin 交易記錄,成為 MinLSN。
長時間執行的交易
使用中的記錄必須包含所有未認可交易的每個部分。啟動交易、但尚未認可或復原交易的應用程式,將不會讓Database Engine將 MinLSN 往前移。這可能導致兩類問題:
- 若系統是在交易已執行許多未認可的修改之後關機,接著重新啟動之復原階段所需的時間可能比 [復原間隔] 選項所指定的時間多很多。
- 因為記錄無法截斷超過 MinLSN,記錄可能會成長得很大。即使資料庫使用的是簡單的復原模式,此狀況也會發生,因為交易記錄檔通常會在每個自動檢查點截斷。
複寫交易
「記錄讀取器代理程式」會監視針對交易式複寫設定之每個資料庫的交易記錄,並將標示要複寫的交易從交易記錄複製到散發資料庫中。使用中的記錄必須包含所有標示要複寫但尚未傳遞到散發資料庫的交易。如果這些交易未及時複寫的話,將使記錄無法截斷。如需詳細資訊,請參閱<交易式複寫的運作方式>。
請參閱
其他資源
CHECKPOINT (Transact-SQL)
管理交易記錄