【SQLServer】Tempdb空間異常增長,空間佔用非常大

TaihangMeng發表於2017-12-27

一、問題現象

    我們一套量產SQLServer,在半夜的時候發出磁碟空間不足告警,我登上去檢查後,發現 tempdb 已經超過500GB。


二、原因解析

    跟AP user溝通後,AP user告訴我們,由於AP邏輯出現問題,導致tempdb異常增長。


三、解決方法

    1、如果可以重啟 SQL Server,tempdb 會自動重新建立,從而使 tempdb 迴歸到初始大小。但是量產環境儘量不要重啟,除非萬不得已。

    2、直接收縮 tempdb(但是始終不成功)。

    (1)命令

USE [tempdb]
GO

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

DBCC SHRINKFILE (N'tempdb.mdf' , 500) -- 收縮datafile到 500MB

GO

DBCC SHRINKFILE (N'templog.ldf' , 10) -- 收縮日誌到 10MB

GO 

(2)圖形化介面


3、如果出現無法收縮tempdb的情況,可先使用以下方式處理,再收縮。

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

USE [tempdb]
GO

DBCC FREESYSTEMCACHE ('ALL')

GO

DBCC SHRINKFILE (N'tempdb.mdf' , 500)

GO


DBCC FREESYSTEMCACHE 使用參考 -- https://docs.microsoft.com/zh-cn/sql/t-sql/database-console-commands/dbcc-freesystemcache-transact-sql

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30776559/viewspace-2149354/,如需轉載,請註明出處,否則將追究法律責任。

相關文章