SQLServer如何釋放tempdb臨時表空間

ywxj_001發表於2023-02-01

SQLServer如何釋放tempdb臨時表空間:

SQLServer經常會遇到一個大SQL一下子把tempdb空間吃滿了,一般這類SQL都會大量使用臨時表空間,比如大量使用帶#的臨時表,#temp,還有就是大量使用排序操作。都會大量消耗臨時表。

當然臨時表也有好處,就是資料可以經過臨時表的中間加工處理後,讓最後要處理的資料變得比較少。這樣就能花費更少的時間把資料跑出來。

使用臨時表可以加快SQL的跑出的速度,但是卻會大量佔用臨時表空間。

不使用臨時表,如果資料量非常大的話可能導致SQL跑出的時間會大大增加,並導致其他資源被大量佔用,比如記憶體和CPU,也會加大磁碟的IO壓力。


一旦臨時表大量增大,最好的解決辦法是重啟SQLServer的資料庫服務。

因為臨時表空間在一直被使用的情況下是很難被收縮的。


重啟了 SQLServer的資料庫服務後臨時表空間會被立即釋放。

但是有一種情況測試下來 SQLServer的資料庫服務重啟後臨時表空間不會被釋放,只是tempdb裡面的空間釋放了,磁碟空間沒有釋放,需要再收縮tempdb才行。


這種情況是,比如原先tempdb資料檔案大小是10GB,然後增到到了100GB,如果這個時候你 重啟了 SQLServer的資料庫服務,那麼tempdb資料檔案會釋放到10GB,磁碟空間也會釋放到10GB。

如果 原先tempdb資料檔案大小是10GB,然後增到到了100GB,你這個時候去手動收縮了tempdb資料檔案到90GB大小, 這個時候你 重啟了 SQLServer的資料庫服務, 那麼tempdb資料檔案只會釋放到90GB, 磁碟空間也只會釋放到90GB。這個時候需要你手動把這個tempdb資料檔案收縮到10GB。磁碟才會釋放到10GB。


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

相關文章