Sql-Server
日誌(ldf)文件不斷增長
我們的 SQL2008 伺服器上只有一個數據庫有問題。由於某種原因,最近日誌文件正在增長和增長。
伺服器執行以下備份
- 每週 - 完整
- 每日 - 差異
- 每小時 - 交易
我已按照此處的資訊(為什麼事務日誌保持增長或空間不足?)但沒有任何運氣並確認以下內容:
- 數據庫處於完全恢復模式
- 備份按預期進行(每小時、每天、每週)
- 日誌文件滿了,說明還有空間可以恢復
- 查看 log_reuse_wait_desc 返回“NOTHING”
與數據庫關聯的網站是我們使用最多的網站,但數據庫和使用量仍然很小(低於 5Gb 的數據),每天有幾百個使用者,但幾天后日誌文件超過 10Gb。
有人知道是什麼原因造成的嗎?我能找到解決此問題的唯一方法是切換到“簡單”恢復模式。縮小文件,切換回“完整”,然後進行新的完整備份以啟動新鏈。
感謝您提供的任何建議
從概念上講,這是到達物理文件末尾時數據庫中應該發生的事情:
但是,聽起來您的日誌標頭不想回到物理日誌文件的開頭,而是繼續觸發自動增長事件。這可能由於多種原因而發生,但最常見的是邏輯日誌前面的vlf 無論出於何種原因都具有 2 的 DBCC LOGINFO 狀態,即使在您現在所做的切換恢復模式之後也是如此,但是修復的方法不管什麼原因都是一樣的。只需執行以下步驟:
- 對數據庫執行日誌備份(例如)
BACKUP LOG [DBNAME]...
- 對事務日誌文件執行DBCC SHRINKFILE操作,指定 1 MB 作為目標大小
- 對數據庫執行另一個日誌備份
- 對事務日誌文件執行另一個DBCC SHRINKFILE操作,指定 1 MB 作為目標大小
- 根據 Kimberly Tripp 的文章,手動增加日誌文件的大小,以將 TLog 恢復到適當的大小。
那麼這裡發生了什麼?
- 第一個 TLog 備份只是強制執行CHECKPOINT 操作並將日誌刷新到磁碟。
- 第一個 DBCC Shrinkfile 操作將物理 TLOG 縮小到目前邏輯日誌所在的位置
- 第二個日誌備份發出另一個檢查點,並且可能會備份/清除位於邏輯日誌前面的任何駐留日誌操作。無論出於何種原因,這些過去從未被刷新過,但此時應該清除它們。此步驟對於解決您的問題至關重要,有時此備份可能需要一些時間,具體取決於需要將多少數據寫入磁碟。
- 第二個 DBCC SHRINKFILE 操作將邏輯日誌文件移動到物理日誌文件的頭部,消除現在可能存在的過多 VLF,並將 TLOG 文件減小到非常小的大小,在本例中為 1MB。必須在第 5 步中手動增加文件,這樣您就不會再遇到 vlf 問題
- 手動增加 tlog 的大小將允許您控制物理日誌文件中 VLF 的大小和數量。這是正確配置它的好時機,因此請充分利用。
關於該過程的最後一點說明。如果您的 tlog 非常活躍,您可能需要執行幾次或在活動減少的視窗期間執行此操作。高活動可能會導致在您執行第二次日誌備份之前發生另一個錯誤的自動增長事件。這基本上將您認為的第 3 步變成了第 1 步。通常第 1 步和第 2 步過得很快,而第 3 步需要最長的時間才能完成。確保執行第 4 步和第 5 步。