Sql-Server-2012

tempdb在釋放東西時不放棄磁碟空間是否正常?

  • December 18, 2016

所以我的 tempdb 變得越來越大。像 200+ GB。

USE tempdb  GO  EXEC sp_spaceused

database_name   database_size   unallocated space 
tempdb          211668.88 MB    206803.45 MB

它使用簡單的恢復模型,根據微軟的說法:

將 tempdb 的恢復模式設置為 SIMPLE。此模型自動回收日誌空間以保持較小的空間需求。

但是“回收日誌空間”是否意味著它仍然保持磁碟分配?

有點像如果我的生意有大量顧客湧入,所以我在街對面借了很多錢來放置額外的汽車,但是一旦我不再需要所有的空間,我仍然保留那個額外的停車場供以後使用(沒有允許其他人使用它)儘管它仍然是空的?

如果這是正常行為,那麼我可能會期望它認為它可能有一天會再次使用它的大量空間,因此如果它有“無限”空間來擴展它最終會根據確定的使用模式停止增長?

或者,它是否應該在作業系統發佈時將磁碟空間歸還給作業系統?

更新

還發現了這個:http ://technet.microsoft.com/en-us/library/ms176037(v=sql.105).aspx

預設情況下,tempdb 數據庫會在需要空間時自動增長,因為文件的 MAXSIZE 設置為 UNLIMITED。因此,tempdb 可以繼續增長,直到包含 tempdb 的磁碟空間耗盡。您可以通過為 tempdb 設置 MAXSIZE 來防止 tempdb 無限制地增長,但不建議這樣做。限制 tempdb 的大小可能會導致數據庫磁碟空間不足。這可能會導致您的生產環境出現嚴重中斷,並且可能會阻止正在執行的應用程序完成操作。

所以也許我已經在這裡回答了我自己的問題,但希望有人能澄清一下:然後我應該把它放在驅動器/分區上嗎?然後它可以“盡可能大”地增長,同時不佔用我想用於其他事情的磁碟空間?但在那種情況下,我想知道 MAXSIZE 和實際上沒有更多空間來物理增長之間有什麼區別。

是的,SQL Server 文件不會自動收縮。它們保持相同大小,除非您通過 SQL Server Management Studio 或使用 DBCC SHRINKFILE 命令顯式縮小它們。雖然您可以將文件設置為自動收縮,但廣泛建議不要這樣做,因為收縮/增長文件非常耗費資源,尤其是在您處理沒有即時文件初始化的日誌文件時。

編輯:響應您的編輯:MAXSIZE 和文件在磁碟用完之前可以獲得的大小之間存在差異。您可以在數據庫屬性的文件部分或使用 ALTER DATABASE 命令進行設置。

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