Sql-Server

對於文件組中的多個文件,數據何時開始放置在文件組中的第二個文件上?

  • October 28, 2020

上一個問題中,有人建議我應該向現有(主)文件組添加一個額外的“文件”,以便為我的數據庫輕鬆添加更多磁碟空間。

所以我這樣做了,沒有任何問題。

但我不確定 Sql Server 何時會決定停止將數據放入原始文件並開始將數據放入新文件?

@davidbrowne 對我的問題的出色回答中,他提到:

當文件組有多個文件時,SQL Server 使用“比例填充算法”。

好的,很好 - 但是它什麼時候“知道”開始填充另一個文件?

目前,這是我設置的……請注意最大文件大小。

在此處輸入圖像描述

我是否需要為原始文件提供最大文件大小(例如限制為 1T),這將幫助 Sql Server“知道”何時開始使用下一個(新)文件?

目前磁碟上剩餘 19GB 空間F:\

您需要預先分配 XWing_ExtraData 上的空間。在每次自動增長 10MB 時,每當 SQL 需要擴展磁碟上的文件時,它會導致大量外部文件碎片和延遲(如果您預先有一個大的預置文件,性能會更好)。

然後禁用 XWing 上的自動增長,使其不能進一步增長,否則 SQL 將繼續填充文件,直到空間不足,觸發 1105 錯誤(文件組已滿)。

關於原始文件,我的偏好是通過對話框禁用自動增長(對話框頂部的複選框或通過ALTER DATABASE...MODIFY FILE...FILEGROWTH=0。如果算法可以選擇,您要確保 SQL 不會嘗試自動增長文件文件而不是 XWing_ExtraData 如果兩者都需要自動增長以適應下一次數據插入。

比例填充基於每個文件中可用空間的數量。

例如,如果文件組中有 2 個文件,file1 和 file2,其中 file1 中的可用空間為 1GB,file2 中的可用空間為 2GB,對文件組的 66% 寫入將寫入 file2,33% 將寫入文件 1。

為了使按比例填充起作用,您應該將文件組中的所有文件的大小預設為相同的大小,因此每個文件中的可用空間量反映了您想要的寫入比例。XWing 文件是否已滿?

如果是這樣,您可能希望將 XWing_ExtraData 的大小調整為足夠大,以容納略高於 XWing 中分配的空間的 50%,然後將 XWing 文件縮小到相同大小,使用DBCC SHRINKFILE. 這會將數據從原始文件移動到新文件。您可能還希望事後對儲存在文件組上的索引進行碎片整理,因為收縮往往會使數據碎片化。

有關 DBCC SHRINKFILE 的詳細資訊,請參閱Microsoft Docs

正如MattyzDBA在他們的回答中所說,您應該為數據文件設置最大文件大小。您還應該設置一個合理的自動增長量,可能在 1GB 左右,假設您已通過本地安全策略小程序授予 SQL Server 服務帳戶“執行卷維護任務”權限。有關設置的詳細資訊,請參見此處。調整文件大小和設置合理的自動增長設置被廣泛認為是“最佳實踐”。

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