Sql-Server-2016

SQL Server 2016:當數據庫中仍有 313 MB 可用時,表無法增長

  • August 5, 2020

昨天報瞭如下錯誤:

無法為數據庫“Z”中的對象“dbo.X”.“Y”分配空間,因為“PRIMARY”文件組已滿

工程師從表中刪除了一些記錄後,錯誤被清除。我昨天無法檢查詳細資訊,因為我實際上沒有管理員訪問權限。我的訪問權限稍後進行了排序。當我今天檢查數據庫大小時,我觀察到以下內容:

在此處輸入圖像描述

有 312.63 MB 可用空間,這意味著有 312.63 MB 空間分配給數據庫但尚未分配給任何頁面或對象(如果我錯了,請糾正我)。我預計昨天的刪除操作不會釋放任何頁面/空間。那麼為什麼數據庫不能使用這個隨時可用並分配給數據庫的空間呢?

我忽略了文件自昨天以來進一步增長的可能性,因為事件發生時已經有足夠的磁碟空間可用。這是一個 SQL Server 2016 SP1 Express Edition,它啟用了Autogrowth設置,文件增長大小為 64 MB,最大大小設置為Unlimited。考慮:

 10184 MB + 64 MB = 10248 MB > 10240 MB (= 10 GB = maximum allowed DB size in Express Edition)

很明顯,該文件不能(也不能)進一步增長。

雖然數據庫無法調整文件大小,但它仍然可以使用任何可用的空間。那為什麼沒有發生呢?

莫非,昨天刪除後,有些對像被刪除了?

您提到您不希望刪除操作釋放空間,但事實並非如此。由於刪除而被清空的頁面成為未使用的空間(可以為同一個對象重複使用),而清空的範圍成為未分配的空間(可以用於任何對象)。

因此,DELETE看起來已經在數據文件中釋放了足夠的空間以避免空間問題。考慮重新組織索引以進一步從部分填充的頁面中回收空間,因為您的數據庫仍然超過 95% 已滿。

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