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