Sql-Server

為什麼 T-log 備份後不截斷 T-log?

  • January 28, 2020

我有一個完全恢復模式的數據庫 myDB。我進行了完整備份並在測試伺服器上恢復了它。之後,我檢查了 T-log 的大小。t-log 的大小為 15600 MB,總空間中的已用空間為 351 MB。我決定截斷那些 351 MB 並執行 T-log 備份。不幸的是,大小根本沒有改變。它再次顯示 351 MB。然後我進行了其他後續的 t-log 備份。大小還是351。為什麼t-log備份不截斷日誌文件?我不是在問收縮,我只是想知道為什麼 t-log 不截斷 t-log。

以下是有關 t-log 的一些詳細資訊:

DBCC LOGINFO

在此處輸入圖像描述

從查詢log_reuse_wait_desc

在此處輸入圖像描述

關於T-log的大小:

在此處輸入圖像描述

第一個螢幕截圖中的第 8 行顯示文件中似乎是活動的 VLF。如果 VLF 中有單個活動日誌記錄,則整個 VLF 將被視為活動日誌,並且該 VLF 不能被截斷。

如果伺服器是 SQL 2016 SP2 或更高版本,您可以使用以下 DMF獲取有關 VLF 的資訊並檢查活動狀態和大小。您可能會發現活動的 VLF 大約為 350 MB,即使只有一個字節處於活動狀態,整個 VLF 也會被視為活動,備份日誌不會將其標記為截斷。

SELECT s.[name], l.vlf_size_mb, l.vlf_active
FROM sys.databases s
CROSS APPLY sys.dm_db_log_info(s.database_id) l

進一步閱讀:

SQL Server 事務日誌中的虛擬日誌文件是什麼?

SQL Server 事務日誌備份、截斷和收縮操作

引用自:https://dba.stackexchange.com/questions/257490