Sql-Server

如何恢復 350 GB 的未分配空間

  • January 18, 2019

我的數據庫初始大小為 370GB。

當我檢查時EXEC sp_spaceused,我可以看到幾乎 360GB 的未分配空間。

未分配的空間是否意味著未使用的空間?如果它是未使用的空間,為什麼這會導致儲存問題?

除了使用 360GB 未分配空間縮小 .mdf 文件之外,我還有哪些選擇?

此外,由於這是一個巨大的數據庫,我可以在下面的“x”位置提到什麼級別的增量 - 每次縮小時我可以從 10,000 MB 開始嗎?

USE Demo
GO
DBCC SHRINKFILE (N ‘Demo’, x)
GO

在這種情況下,我還有什麼需要考慮的嗎?

添加新的數據文件有幫助嗎?

你知道這個應用程序/數據庫發生的一切嗎?

想像一下這個場景:

  • 貴公司有一個非常重要的人需要獲取(每日|每月|每季度|每年)財務報告

  • 這些報告由計劃的作業生成

  • 這項工作在數據庫中生成數百 GB 的數據——創建工作表、處理數字等

  • 之後,作業通過刪除(或截斷+重建)工作表來“清理”自己

    • 這會導致數據庫中有大量未使用的空間 - 但文件的大小不會改變
  • 有一天,一位 DBA 出現並縮小了這個數據庫

  • 在未來的某一天,這個報告工作試圖執行 - 但由於文件必須一遍又一遍地增長,它會停止

  • 也許工作甚至失敗,或者延遲太久以至於它開始影響正常工作時間內的性能

  • 非常重要的人很生氣,因為他們沒有重要的報告,每個人都在向他們抱怨系統慢

你不希望這種情況發生,是嗎?


話雖如此,如果您確定數據庫:

  • 真的不需要這個空間,而且
  • 永遠不會使用這個空間,因為它不會很快獲得數據,並且
  • 您實際需要此驅動器上的空間(按 GB 支付給雲供應商、其他應用程序需要空間的昂貴 SAN 等),

然後無論如何,縮小它。

首次創建此數據庫時,文件大小可能存在拼寫錯誤(有人在“37”的末尾添加了 0 - 噗,370 GB 數據庫文件)。

也許有一次永遠不會再次發生的數據載入/刪除導致數據庫增長到這個大小。


如果您這樣做,請務必考慮一下您與 SHRINKFILE 一起使用的“目標大小”。您說它只有 10 GB 的已用空間,但我不會立即將其設置為 10 GB - 您正在將一些數據放入此數據庫,對嗎?

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