Sql-Server
TempDB 事務日誌未釋放空間
每次我在 tempdb 中完成事務時,臨時日誌都會增長,但是一旦事務完成,日誌似乎並沒有釋放空間。日誌使用百分比為 43.4%,但似乎以 4% 左右的增量增加。
當我尋找未結交易(
sys.dm_exec_sessions
)時,沒有。然而,log_reuse_wait_desc
在sys.databases
顯示“ACTIVE_TRANSACTION”。當我查詢sys.dm_tran_active_transactions
DMV 時,它只顯示工作表。我不確定如何從 tempdb 事務日誌中釋放這個空間。
我剛剛執行了一個手動檢查點,這似乎釋放了空間,所以我不確定為什麼空間沒有被自己釋放
僅當
log_reuse_wait_desc
SQL Server 嘗試清除日誌時才會更新。換句話說,它不一定是日誌是否可以被清除的“實時”視圖。Paul Randal 在他的部落格文章“為什麼 log_reuse_wait_desc 在進行日誌備份後說 LOG_BACKUP? ”中解釋了這一點。對於
tempdb
使用SIMPLE
恢復模型的 ,SQL Server 會在發出 a 時嘗試清除日誌CHECKPOINT
。正如您所提到的,這就是為什麼做手冊CHECKPOINT
可以釋放空間的原因。
CHECKPOINT
SQL Server 在自動啟動方面沒有那麼激進tempdb
,這既是因為它使用了SIMPLE
恢復模型,又因為它是定義上的“臨時”資訊。所以沒有必要不斷地把它持久化到磁碟上。這是特定於tempdb
.根據Paul Randal 的另一篇博文,詳細資訊如下:
- 僅當日誌使用率達到 70% 時才進行自動
CHECKPOINT
操作tempdb
- 臟頁不會自動寫入磁碟
CHECKPOINT
(其主要目的是清除日誌)中的“工作表”行
dm_tran_active_transactions
是正常行為,不應阻止日誌被清除。您可以在此問答中了解更多資訊: