Sql-Server

索引重建後使用的數據庫空間減少(Ola 腳本)

  • July 4, 2018

我重建了一些高度分散的索引。索引重建後,我看到我使用的數據庫空間減少了近 50%(從 77gb 到 33gb)

這是正常的行為嗎?我沒有打開自動收縮 - 我失去了數據嗎?

注意:我的數據庫文件中使用的空間減少*了;*我的數據庫文件的實際物理大小沒有改變。

用於計算已用空間的命令:

SELECT sum(CAST(FILEPROPERTY(name, ''SpaceUsed'') AS INT))/128.0 as Space_Used_MB

結果select @@version

Microsoft SQL Server 2014 (SP2-CU11) (KB4077063) - 12.0.5579.0 (X64)

使用 Ola Hallengren 的腳本重建索引。使用的參數:

Databases = 'USER_DATABASES',
FragmentationMedium='INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE 
',
FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', 
FragmentationLevel1 = 5, FragmentationLevel2 = 30, FillFactor=80, 
UpdateStatistics = 'ALL', OnlyModifiedStatistics = 'Y', LogToTable = 'Y'" -b 

您不會因索引維護/重建而失去數據。由於您的數據是碎片化的,因此數據將分佈在聚集/非聚集索引中的多個葉頁上,因為數據會隨著時間的推移而被刪除/更新,從而在原始頁面位置留下空白空間。重新組織/重建索引通過重新排序頁面中的數據並將空間釋放回數據庫以供將來使用來恢復空間。

這是很常見的行為。您通過在葉級別重新排序頁面來回收未使用的空間。

除非它很關鍵,否則不要縮小您的數據文件 - 您將來可能需要該空間。您只是在浪費時間,(再次)分割數據庫和鎖定表。

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