web-dev-qa-db-ja.com

インデックスの再構築後に使用されるデータベーススペースが減少しました(Olaスクリプト)

非常に断片化されたいくつかのインデックスを再構築しました。インデックスの再構築後、使用されているデータベーススペースがほぼ50%減少しました(77GBから33GBに)

それは正常な動作ですか?自動縮小をオンにしていません-データを失いましたか?

注:使用スペース減少inデータベースファイル;データベースファイルの実際の物理サイズは変更されていません。

使用されるスペースの計算に使用されるコマンド:

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)

OlaHallengrenのスクリプトを使用して実行されたインデックスの再構築。使用されるパラメーター:

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 
1
SQL_NoExpert

インデックスのメンテナンス/再構築でデータが失われることはありません。データが断片化されると、データが時間の経過とともに削除/更新され、元のページ位置に空きスペースが残るため、データはクラスター化/非クラスター化インデックスの複数のリーフページに分散されます。インデックスを再編成/再構築すると、ページ内のデータを並べ替え、将来使用するためにスペースをデータベースに解放することで、スペースが回復します。

3
SQLApostle

これは非常に一般的な動作です。リーフレベルでページを並べ替えることにより、未使用のスペースを再利用しています。

重要でない限り、データファイルを縮小しないでください。将来、そのスペースが必要になる可能性があります。あなたはただ時間を無駄にし、データベースを(再び)断片化し、テーブルをロックしています。

3
Stefano