Sql-Server

SQL Server 2012 擴大數據庫空間

  • February 20, 2016

我試圖在我的 SQL Server 2012 上擴大數據庫實例的數據庫大小。我.MDF在數據庫實例下手動添加了一個新文件

在此處輸入圖像描述

在收縮數據庫對話框重新啟動後,我可以看到可用空間

在此處輸入圖像描述

在收縮文件對話框中添加了可用空間

在此處輸入圖像描述

但是當我執行以下 SQL 查詢時,可用空間仍然很小

select
   name
   , filename
   , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB
   , convert(decimal(12,2),round(fileproperty(a.name,'SpaceUsed')/128.000,2)) as SpaceUsedMB
  , convert(decimal(12,2),round((a.size-fileproperty(a.name,'SpaceUsed'))/128.000,2)) as FreeSpaceMB
from 
   dbo.sysfiles a

數據庫仍然只看到兩個文件….

在此處輸入圖像描述

我做錯了什麼?

$$ Edit $$如果只是統計數據在查詢中顯示錯誤,那對我來說沒問題。我的問題是以正確的方式向數據庫添加空間的整個過程,還是我需要添加一些東西來完成這個過程?抱歉稍後編輯 謝謝你的幫助

社區 Wiki 答案由Kris Gruttemeyer對問題的評論生成

增加您的自動增長增量。它顯示您正在增加 1MB,這對您的儲存系統來說可能是一場噩夢,因為我確信它會不斷擴展。您希望根據數據庫的使用情況和增長模式為數據庫提供足夠的增長空間,這樣您就可以避免在此過程中每 1MB 進行昂貴的 I/O 操作。

將 autogrow 設置為 500MB 將與“殺死伺服器”相反,並且會有所幫助,因為每次遇到 autogrow 事件時都會有更多空間。使用 1 MB 比使用 500 MB 造成的危害要大得多。想想看,你的數據庫增長到 1MB。每一個。單身的。時間。這對您的儲存系統和磁碟來說是很多工作。鑑於您的數據庫大小,我將從 1-5GB 的增長開始。

這是我推薦閱讀的一篇很棒的文章,特別是第一部分:

我喜歡盡可能以最簡單的模式操作。除非有充分的理由擁有多個文件(例如 tempDB、某些 DB 的更快驅動器等),否則將所有文件放在一個文件中。擁有多個文件有很多理由,但為了擁有它們而擁有它們只會讓您頭疼。從可管理性的角度來看,這使事情變得更加容易,因為您只需擴展一個數據文件,完成它,然後去找其他事情做。:)

數據庫文件是容器,您希望主動調整大小並為其提供增長空間而不會過度(2T 數據庫文件中的 50GB 數據會過多且浪費空間)。如果我有一個 2T 的 DB 文件,但它實際上只有 1GB 的數據,那麼 SQL 只需要處理它需要的 1GB 數據,而不是整個 2T 數據文件。

參考DBCC UPDATEUSAGE (Transact-SQL)

更新統計資訊 - sysviews 不同步。

似乎系統視圖並不總是準確的,而 sp_spaceused 也因此而臭名昭著。一種記憶體形式適用於非關鍵但繁重的流程數據收集功能 - 例如測量分區(就像您剛剛創建的另一個分區)和分配。

檢查sp_spaceused (Transact-SQL),我們看到:

指定updateusage時,SQL Server 數據庫引擎會掃描數據庫中的數據頁,並對每個表使用的儲存空間的sys.allocation_unitssys.partitions目錄視圖進行任何必要的更正。在某些情況下,例如,刪除索引後,表的空間資訊可能不是最新的。updateusage在大型表或數據庫上執行可能需要一些時間。僅當您懷疑返回的值不正確並且該程序不會對數據庫中的其他使用者或程序產生不利影響時,才使用*updateusage 。*如果願意,DBCC UPDATEUSAGE可以單獨執行。

嘗試執行:

EXEC sp_spaceused @updateusage = N'TRUE';

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