Sql-Server-2008-R2

SQL Server 2008 R2 數據庫 - 為什麼數據庫在再次增長之前沒有使用可用空間?

  • May 13, 2020

我有一個包含 700 個表的供應商應用程序數據庫。這些數據從未存檔,可以追溯到 2006 年。企業只需要所有這些數據。

我的問題是當我監控數據庫的大小/增長時,我注意到數據庫正在增長但它有可用空間的趨勢。

數據庫為 187GB,有 40GB 可用空間,備份大小為 146GB。數據庫以 1GB 的自動增長增量增長,如果它有可以使用的可用空間,則不需要這樣做,對嗎?

我查看了 fill_factor 因為我不確定供應商在做什麼,並且在數據庫級別它保持在 0 預設值,表示頁面將被填充到 100%。有一些對象,主要是索引,具有 80% 或 85% 的填充因子。

我難住了。

我正在重新編制索引,並且磁碟碎片報告回來時很少或沒有碎片。

有什麼想法嗎?

這裡有幾點值得注意。

首先,只要數據庫需要空間來完成事務,它就會增長。我在這裡寫過這個。如果您對數據庫執行維護(例如,重建索引)並且您遇到了一個足夠大的表,那麼您可能會看到結果發生了增長事件,即使看起來您有大量的可用空間。

其次,您可以檢查您的預設跟踪文件,以了解您的自動增長事件何時發生。通常,您會發現增長事件的時間與維護相吻合,或者可能是某種批量載入。

高溫高壓

查看事務日誌文件和每個文件組上的可用空間。可能是您有某些表/索引/等。進入某個文件組並且該文件組有可用空間,但其他文件組沒有。

此查詢複製自http://beyondrelational.com/modules/2/blogs/104/posts/11740/quick-way-to-find-the-free-space-on-each-filegroup-within-a-database .aspx

SELECT
   b.groupname AS 'File Group',
   Name, 
   [Filename],
   CONVERT (Decimal(15,2),ROUND(a.Size/128.000,2)) 
       [Currently Allocated Space (MB)],
   CONVERT (Decimal(15,2),
   ROUND(FILEPROPERTY(a.Name,'SpaceUsed')/128.000,2))
       AS [Space Used (MB)],
   CONVERT (Decimal(15,2),
   ROUND((a.Size-FILEPROPERTY(a.Name,'SpaceUsed'))/128.000,2))
       AS [Available Space (MB)]
FROM dbo.sysfiles a (NOLOCK)
JOIN sysfilegroups b (NOLOCK) ON a.groupid = b.groupid
ORDER BY b.groupname

Eric Johnson 的這個也不錯: http ://web.archive.org/web/20100116013910/http://sqlblog.com/blogs/eric_johnson/archive/2009/08/07/file-and-filegroup-space -details.aspx

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