Sql-Server
如何恢復 350 GB 的未分配空間
我的數據庫初始大小為 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 - 您正在將一些數據放入此數據庫,對嗎?