Sql-Server

TempDB 事務日誌未釋放空間

  • August 8, 2019

每次我在 tempdb 中完成事務時,臨時日誌都會增長,但是一旦事務完成,日誌似乎並沒有釋放空間。日誌使用百分比為 43.4%,但似乎以 4% 左右的增量增加。

當我尋找未結交易(sys.dm_exec_sessions)時,沒有。然而,log_reuse_wait_descsys.databases顯示“ACTIVE_TRANSACTION”。當我查詢sys.dm_tran_active_transactionsDMV 時,它只顯示工作表。

我不確定如何從 tempdb 事務日誌中釋放這個空間。

我剛剛執行了一個手動檢查點,這似乎釋放了空間,所以我不確定為什麼空間沒有被自己釋放

僅當log_reuse_wait_descSQL Server 嘗試清除日誌時才會更新。換句話說,它不一定是日誌是否可以被清除的“實時”視圖。Paul Randal 在他的部落格文章“為什麼 log_reuse_wait_desc 在進行日誌備份後說 LOG_BACKUP? ”中解釋了這一點。

對於tempdb使用SIMPLE恢復模型的 ,SQL Server 會在發出 a 時嘗試清除日誌CHECKPOINT。正如您所提到的,這就是為什麼做手冊CHECKPOINT可以釋放空間的原因。

CHECKPOINTSQL Server 在自動啟動方面沒有那麼激進tempdb,這既是因為它使用了SIMPLE恢復模型,又因為它是定義上的“臨時”資訊。所以沒有必要不斷地把它持久化到磁碟上。這是特定於tempdb.

根據Paul Randal 的另一篇博文,詳細資訊如下:

  • 僅當日誌使用率達到 70% 時才進行自動CHECKPOINT操作tempdb
  • 臟頁不會自動寫入磁碟CHECKPOINT(其主要目的是清除日誌)

中的“工作表”行dm_tran_active_transactions是正常行為,不應阻止日誌被清除。您可以在此問答中了解更多資訊:

SQL Server sys.dm_tran_active_transactions 長時間執行的事務工作表

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