壓縮交易記錄檔

縮減交易記錄的實體大小會需要壓縮記錄檔。壓縮交易記錄可透過移除一或多個非使用中虛擬記錄檔,縮減實體大小。保存任何使用中記錄檔記錄的虛擬記錄檔 (亦即,「使用中虛擬記錄檔」) 是邏輯記錄的一部分,而且無法加以移除。如需有關虛擬記錄檔的詳細資訊,請參閱<交易記錄檔實體架構>。

ms178037.note(zh-tw,SQL.90).gif附註:
如果交易記錄最近尚未截斷,就要等到記錄截斷後,才能壓縮記錄。如需詳細資訊,請參閱<會造成延遲記錄截斷的因素>。

壓縮記錄檔如何運作?

大小縮減的單位為一個虛擬記錄檔。例如,如果您有一個 600 MB 的記錄檔,而且已經分割成 6 個 100 MB 的虛擬記錄檔,記錄檔的大小就只能以 100 MB 的增量為單位來縮減。檔案大小可縮減為 500 MB 或 400 MB 的大小,但不能縮減為 433 MB 或 525 MB 這類的大小。

ms178037.note(zh-tw,SQL.90).gif附註:
建立或擴充記錄檔時,Database Engine 會以動態方式選擇虛擬記錄檔的大小。如需詳細資訊,請參閱<交易記錄檔實體架構>。

對於記錄檔而言,目前的大小與虛擬記錄檔所用的頁面相同。保存部分邏輯記錄的虛擬記錄檔無法釋出。如果記錄檔中的所有虛擬記錄檔都保存部分邏輯記錄,就無法壓縮此檔案。要等到記錄截斷將一或多個虛擬記錄檔標示為非使用中之後,才能進行壓縮。

壓縮檔案作業只能移除非使用中的虛擬記錄檔。如果沒有指定目標大小,壓縮檔案作業就會移除所有非使用中的虛擬記錄檔。如果指定了目標大小,指定的壓縮檔案作業就只會移除接近但不超過目標大小所需的非使用中虛擬記錄檔。進行壓縮之後,記錄檔通常會稍微比目標大小更大,但絕對不會更小。虛擬記錄檔會讓您難以預測記錄檔實際壓縮的程度。

檔案壓縮時,釋出的空間必須來自檔案結尾。壓縮交易記錄檔之後,記錄檔結尾會釋出足夠的虛擬記錄檔,以便將記錄檔縮減成使用者要求的大小。使用者所指定的 target_size 將進位至第二高的虛擬記錄檔界限。例如,如果使用者針對我們包含六個 100 MB 虛擬記錄檔的 600 MB 範例檔,指定了 325MB 的 target_size,最後的兩個虛擬記錄檔將被移除,而新的檔案大小則為 400 MB。

DBCC SHRINKDATABASE 或 DBCC SHRINKFILE 作業會立即嘗試將實體記錄檔壓縮為所要求的大小:

  • 如果邏輯記錄檔沒有任何部分位於 target_size 標示之外的虛擬記錄檔中,target_size 標示之後的虛擬記錄檔將會釋出,且在順利完成 DBCC 陳述式時不會顯示任何訊息。

如果虛擬記錄檔中的部分邏輯記錄檔確實超過 target_size 標示,SQL Server Database Engine 將盡可能釋出最多的空間,並發出參考用訊息。此訊息將告訴您需要執行哪些動作,才能從檔案結尾的虛擬記錄檔移除邏輯記錄檔。執行此動作之後,您可以重新發出 DBCC 陳述式來釋出剩餘的空間。

例如,假設包含六個虛擬記錄檔的 600 MB 記錄檔,其中有一個邏輯記錄開始於虛擬記錄檔 3,而結束於虛擬記錄檔 4,當您執行將 target_size 設成 275 MB 的 DBCC SHRINKFILE 陳述式時:

在壓縮之前具有六個虛擬記錄檔的記錄檔

因為虛擬記錄檔 5 與 6 並未包含邏輯記錄檔的任何部分,所以會立即釋出。不過,若要符合指定的 target_size,虛擬記錄檔 4 也應被釋出,但是因為它包含了邏輯記錄檔的結束部分,因此無法被釋出。釋出虛擬記錄檔 5 與 6 之後,Database Engine 會以虛擬記錄來填滿虛擬記錄檔 4 的剩餘部分。這樣會將記錄檔的結尾強制到虛擬記錄檔 1 的結尾。在大多數系統中,以虛擬記錄檔 4 開始的所有交易都可迅速認可。這表示記錄檔的整個使用中部分會移至虛擬記錄檔 1。記錄檔現在看起來如下:

記錄檔已縮減為 4 個虛擬檔案

DBCC SHRINKFILE 陳述式也會發出參考用訊息,指出無法釋出所有要求的空間,並指示您可以執行 BACKUP LOG 陳述式來釋出剩餘的空間。將記錄的使用中部分移到虛擬記錄檔 1 之後,BACKUP LOG 陳述式將截斷位於虛擬記錄檔 4 中的整個邏輯記錄:

在截斷記錄檔之後的記錄檔結果

因為虛擬記錄檔 4 不再保留邏輯記錄檔的任何部分,您現在就可以執行同樣的 DBCC SHRINKFILE 陳述式,將 target_size 設為 275 MB。接著會釋出虛擬記錄檔 4,且實體記錄檔的大小將縮減為您要求的大小。

ms178037.note(zh-tw,SQL.90).gif附註:
某些因素 (例如,長時間執行的交易) 可能讓虛擬記錄檔長期保持在使用中的狀態。這可能會限制記錄的壓縮,或甚至導致記錄完全無法壓縮。如需詳細資訊,請參閱<會造成延遲記錄截斷的因素>。

壓縮記錄的時機為何?

壓縮記錄可以在資料庫連線時進行。發生下列狀況時,會實際縮小記錄檔的大小:

  • 發生自動壓縮作業時。
  • 執行參考記錄檔的 DBCC SHRINKFILE 陳述式時。
  • 執行 DBCC SHRINKDATABASE 陳述式時。

若要壓縮記錄檔

若要監視記錄檔壓縮事件

若要監視記錄空間使用

請參閱

概念

寫滿交易記錄疑難排解 (錯誤 9002)
設定資料庫選項
使用交易記錄備份
交易記錄截斷

其他資源

BACKUP (Transact-SQL)
DBCC SHRINKDATABASE (Transact-SQL)
DBCC SHRINKFILE (Transact-SQL)
空間配置與重複使用

說明及資訊

取得 SQL Server 2005 協助