Sql-Server

已分配的臨時數據庫空間——它會被回收嗎?

  • April 7, 2016

我觀察到生產環境中的 tempdb 在初始化後已經增長到 100 GB。

我知道由於伺服器負載和一些昂貴的查詢導致 tempdb 在短短兩天內增長。我已經觀察了一個多星期了,發現這個尺寸沒有進一步增長並且保持不變。

我在具有 8 個邏輯核心的伺服器上為 tempdb 配置了一個 mdf 文件。雖然我可以根據邏輯核心添加多個 mdf 文件。

我觀察到在我的情況下,臨時數據庫數據文件的空閒頁面大小和物理大小是相同的

SELECT SUM(unallocated_extent_page_count) AS [free pages], 
(SUM(unallocated_extent_page_count)*1.0/128) AS [free space in MB]
FROM sys.dm_db_file_space_usage;

幫助我了解如果我們沒有顯式執行腳本來縮小空間或重新啟動伺服器以重置臨時數據庫分配,是否會自動回收這個物理空間?

與所有數據庫一樣,tempdb 中的空閒(未分配)空間被重新用於新對象。無需任何操作即可重用此空間。

tempdb 文件的物理大小將反映自上次啟動實例以來增長的高水位標記。實例重新啟動後,大小將恢復為初始文件大小,如果發生增長,則釋放磁碟捲上的空間。也可以使用DBCC SHRINKFILE. 這不應該正常進行,但如果增長是異常的,例如由於錯誤的查詢,這可能是可取的。最好調整文件大小以適應預期的空間需求,並為意外需求提供增長作為安全網。

相同大小和增長的多個 tempdb 數據文件可以通過減少某些工作負載的分配頁面爭用來提高性能。然而,這與空間回收無關。

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