Sql-Server

SQL-Server:sp_spaceused 提供零行但清理表的大數據大小

  • December 14, 2011

在清理我的表DELETE FROM MyTable(並執行DBCC shrinkdatabase('MyDB')應該重要的)後,我執行語句EXEC sp_spaceused MyTable。結果讓我感到困惑:

tableName   numberOfRows   reservedSize   dataSize   indexSize   unusedSize
---------   ------------   ------------   --------   ---------   ----------
MyTable     0              21664 KB       20672 KB   736 KB      256 KB

如您所見,有零行,但有將近 21 MB 的數據。我的問題是:這種情況的可能原因是什麼和/或我該如何進一步調查?

DELETE 不回收空間,它刪除行。

空間可以保持分配有幾個原因,其中 3 個是:

  • 幽靈清理仍在執行
  • 該表沒有聚集索引
  • 系統表尚未更新

嘗試

  • EXEC sp_spaceused 'MyTable', 'true'強制空間使用更新
  • TRUNCATE TABLE釋放空間,而不是刪除行
  • DELETE myTABLE WITH (TABLOCKX)如果沒有聚集索引並且不能使用 TRUNCATE

不要執行DBCC shrinkdatabase,因為它沒有增加任何價值,它只會再次增長

引用自:https://dba.stackexchange.com/questions/9141