Sql-Server

SQL Server 數據庫增長太快

  • August 5, 2013

我有一個數據庫的問題。問題如下: 數據庫在SQL Server 2000 Standard上執行了6 年,處於完全恢復模式。

今年夏天開始時,數據庫大約有5GB

從那時起,我們在正常使用之外所做的唯一一件事就是進行了一些廣泛的刪除。

本週,PC 出現問題,我被迫在 SQL Server 2008R2 Express上進行備份和恢復,並將數據庫設置為 2008 模式。

備份文件大約1GB。當我恢復它時,MDF 是9GB 大小!我檢查了舊的中密度纖維板,它的尺寸相同。

我檢查了表的大小,它們無法達到報告的 9GB!

我做了縮小,但尺寸沒有改變。

任何線索或在哪裡檢查?

完全恢復是否有可能影響 MDF 文件的大小?

我正在考慮將恢復模式設置為簡單,備份並恢復它。它會有所作為嗎?我可以在實時數據庫上執行此操作嗎?

提前謝謝!

更新:數據庫的初始大小為 1306 MB

UPDATE2 sp_spaceused:數據庫大小 = 8646.88 MB 未分配空間 = 0.00 MB

保留=1336984 KB 數據=1020376 KB index_size=210408 KB 未使用=106200 KB

過去 6 年,該數據庫在 SQL Server 2000 Standard 上以完全恢復模式執行。

只要您定期進行完整備份和日誌備份以控制日誌文件大小,這就可以了。這裡有很多關於日誌管理的文章和問題。

今年夏天開始時,數據庫大約有 5GB。從那時起,我們在正常使用之外所做的唯一一件事就是進行了一些廣泛的刪除。

大量刪除是好的,但要明白,數據使用的空間沒有釋放回作業系統,除非你縮小了數據文件。

本週,PC 出現問題,我被迫在 SQL Server 2008R2 Express 上進行備份和恢復,並將數據庫設置為 2008 模式。

我希望你測試你的程式碼!從 SQL 2000 到 SQL 2008 R2,T-SQL 語法發生了很大的變化。我支持了許多由於其中一些更改而損壞的數據庫。另請注意,Express 對數據庫可以增長的大小有限制,使用 SQL 2008 R2 時為 10GB

備份文件大約 1GB。當我恢復它時,MDF 是 9GB 大小!我檢查了舊的中密度纖維板,它的尺寸相同。我檢查了表的大小,它們無法達到報告的 9GB!

當您對數據庫進行備份時,備份只會抓取數據本身以及數據庫的一些配置資訊。這些配置項之一是數據和日誌文件的初始大小。我希望如果您檢查數據庫屬性,您可能會發現數據文件 (MDF) 的初始大小設置為 9GB。

我做了縮小,但尺寸沒有改變。

數據庫收縮很可能是您執行的操作。儘管不明智,但如果您需要重新獲得磁碟空間或只是控制數據庫的數據文件 (MDF),您將需要執行data文件收縮。同樣,在 MSDN 和部落格文章中有大量文章提供了這樣做的方法。

完全恢復是否有可能影響 MDF 文件的大小?

沒有。

我正在考慮將恢復模式設置為簡單,備份並恢復它。它會有所作為嗎?

以您的數據文件的大小,不。

嘗試執行以下命令:

EXEC sp_msforeachtable 'EXEC sp_spaceused [?]'

unused如果您發現任何表的列中有任何過多的值,請執行以下命令:

ALTER INDEX ALL ON <TableName> REBUILD

或者使用您選擇的重建索引方法。不過,您想進行完全重建,因為我不相信重組會清理不必要的未使用空間。

僅供參考,excessive我的意思是 10-100 mb 範圍內或更高的桌面上實際使用不到兩倍可用空間的任何東西。或者任何具有非常大的未使用空間的表。我不想親自在 5GB 的表上看到 1GB 的未使用空間。雖然我通常不檢查這個,除非有實際的空間問題。

我的unnecessary unused space意思是,您的一個或多個表可能保留了大量空間,它要麼不太可能使用,要麼根本不能使用。SQL 通常保留一些空間,這是正常的和想要的。只有當它變得過度時才會出現問題。

重建完成後,嘗試使用 sp_spaceused 並查看是否解決了問題。如果是這樣,那麼您可以再次嘗試收縮。只是要指出,這是少數幾個合理收縮的情況之一。您有一個數據庫,在還原之前(在 2000 年)為 5 GB,現在還原後為 9 GB,因此希望不需要額外的空間。

如果我不得不猜測額外的空間是由於從 2000 升級到 2008 R2 造成的。我以前從未嘗試過這麼大的跳躍,所以我不能確定。希望以上內容可以消除它造成的任何額外空間。

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