Tempdb initial size和dbcc shrinkfile 在使用sql server時您可能遇到過下面的情況,tempdb的數據文件初始大小為3mb, 隨著對tempdb的使用,tempdb文件逐漸變得很大(例如30GB),導致了磁盤空間不足。 此時您需要立刻釋放tempdb文件所占用的空間,這時你會
Tempdb initial size和dbcc shrinkfile
在使用sql server時您可能遇到過下面的情況,tempdb的數據文件初始大小為3mb, 隨著對tempdb的使用,tempdb文件逐漸變得很大(例如30GB),導致了磁盤空間不足。 此時您需要立刻釋放tempdb文件所占用的空間,這時你會有兩個選擇:
客戶嘗試使用dbcc shrinkfile依然無法收縮,但發現tempdb大小沒有變化,仍然是30GB。客戶搜索到了下面的這篇文章:
Shrink TempDB Transaction Log fails after overflow
于是嘗試使用dbcc freesystemcache('ALL') , 然后使用dbcc shrinkfile,但發現tempdb仍然無法收縮。遇到這樣情況可能是因為在使用dbcc freesystemcache('ALL')時,依然有session在引用tempdb,所以無法清除所有的internal objects,導致無法收縮。于是客戶決定重啟sql server。奇怪的是,SQL Server重啟后,客戶發現tempdb沒有變回初始大小的3mb,而是依舊保持了30GB的尺寸。打開SSMS查看tempdb的初始大小,非常奇怪的,initial size變成了30GB…
為什么會出現這樣的結果呢?原因是dbcc shrinkfile會把tempdb的initial size設置為語句運行完之后tempdb文件的當前大小。所以當shrinkfile沒能成功收縮tempdb時,tempdb的initial size就變成了30GB,即使重啟SQL Server, tempdb依舊還是占用了30GB的空間。
因此在執行dbcc shrinkfile前要千萬小心咯。你需要確保沒有session引用tempdb的情況下執行dbcc freesystemcache('ALL'), 之后再進行收縮。如果無法保證,那么就只能通過執行alter database,將initial size縮小,然后重啟SQL Server來收縮tempdb了。Alter database語句如下:
name='tempdev',size=10mb)
請注意,如果指定的size小于當前大小,文件是不會縮小的,但initial size會變成指定的size.
更多信息
===
上述討論所的知識點和技巧都是針對tempdb的,請不要將其應用于user database。關于user database的情況我會在后續的文章里介紹。
posted on
,聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com