收縮 tempdb 數據庫

客戶需求:

這是一個生產環境,在夜深人靜的時候發現 tempdb 已經超過500GB。


需求分析:

我們知道,如果重啓 SQL Server,tempdb 會自動重新創建,從而使 tempdb 迴歸到初始大小。但是這是生產環境,不允許重啓 SQL Server。


嘗試:

直接收縮 tempdb,始終不成功。

USE [tempdb]
GO

DBCC SHRINKFILE (N'tempdev' , 0, TRUNCATEONLY)  --釋放所有可用空間
GO

DBCC SHRINKFILE (N'tempdev' , 500) -- 收縮到 500MB

GO


解決方案:

SQL Server 2005 及後續版本爲了增強 tempdb 的性能,會緩存一些 IAM 頁,以備將來重新使用這些頁面。在這種情況下,必須首先釋放 IAM 頁,才能釋放其對應的頁面。因此,通過 DBCC FREESYSTEMCACHE,從所有緩存中釋放所有未使用的緩存條目,然後再收縮 tempdb 。

USE [tempdb]
GO

DBCC FREESYSTEMCACHE ('ALL')

GO

DBCC SHRINKFILE (N'tempdev' , 500)

GO


終於收縮到 500 MB。成功!



關於 DBCC FREESYSTEMCACHE,請參考 https://technet.microsoft.com/zh-cn/library/ms178529.aspx

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章