Sql-Server

未重用數據庫可用空間

  • June 5, 2017

在我工作的公司,我們遇到了一個問題,SQL Server 2008 R2 似乎沒有正確計算數據庫中的可用空間。因此,該伺服器上的此類數據庫的磁碟空間使用量在不應該增長的情況下迅速增長。

我們有兩台數據庫伺服器在 Windows Server 2008 R2 上執行 SQL Server 2008 R2 10.50.1600.1 (RTM),稱為 Server A 和 Server Z。據我們所知,兩台伺服器都是相同的,包括 SQL Server 配置。

每台伺服器上保存的數據庫非常相似,儘管沒有兩個完全相同。所有數據庫都設置為簡單恢復模式。

每天晚上,在受影響最嚴重的數據庫上,都會執行一次數據導入,從數據庫中刪除大約 3 GB 的數據,並插入大約 3 GB 的數據,可能還要多一點。通常情況下,數據庫的大小只有在插入的數據大於刪除的數據時才會增長,例如,如果刪除 3GB 並插入 3.1GB,則數據庫會增長 0.1GB。

在伺服器 A 上,這最近發生了變化,因此在上面的範例中,每次導入數據時數據庫都會增長 3.1GB。舊數據肯定還在被刪除。增長的是 MDB 文件,而不是事務日誌。

大多數情況發生在一張表中。在計算該表中數據的大小時,它不會與 SQL Server 在查看表屬性數據空間值時報告的大小相加。該表有一個聚集索引,我們對其進行了重建和重組,但沒有顯著影響。

在調查此問題的過程中,我們對數據庫進行了備份,並使用相同的 bak 文件以不同的名稱將其恢復到伺服器 A 和伺服器 Z。伺服器 A 報告了 9% 的可用空間,伺服器 Z 報告了 75% 的可用空間,我們能夠相應地縮小數據庫。

基於此,似乎伺服器 A 上的 SQL Server 存在一個問題,因為同一數據庫報告伺服器 Z 上的 SQL Server 上的可用空間量不同。我們現在已經對兩個受影響的數據庫進行了嘗試,結果相似.

然而,我們不知道這些伺服器之間的任何差異,也不知道在這個問題引起我們注意的這段時間所做的任何更改。

有誰知道可能導致這種情況的原因?

在伺服器 A 和伺服器 Z 上的所有數據庫上,該表的索引填充因子為 0。數據庫上沒有活動跟踪。DBCC CHECKDB 未報告任何錯誤。

我們的目標是在年底前升級到 SQL Server 2016。我們遇到的問題是,這導致我們用完磁碟空間,所以我們不能等那麼久。無法理解為什麼這才剛剛開始發生,或者為什麼只有一台伺服器受到影響。將詢問有關修補 SQL 伺服器的問題。

重新啟動伺服器已解決問題

重新啟動伺服器 A 後,伺服器 A 上受影響的數據庫上顯示了正確的可用空間量。

例如,對於問題中的範例,受影響的數據庫在伺服器 A 上顯示 9% 可用空間,在伺服器 Z 上顯示 75% 可用空間現在也顯示重新啟動伺服器 A 後,伺服器 A 上的 75% 可用。

我們現在已將伺服器 A 上受影響的數據庫縮小到正常數量的可用空間並執行導入。數據庫僅隨著添加的新數據量而增長。例如,如果刪除 3GB 並插入 3.1GB,則數據庫增長了 0.1GB 而不是 3.1GB。

作為參考,伺服器 A 已在 3 週前重新啟動,我們現在計劃在接下來的幾個月內升級到 SQL Server 2016。

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