SQL Server 2008および2012でのインデックスの再構築には、Ola HallengrenのIndexOptimizeスクリプトを使用しています。これらのメンテナンススクリプトは非常に優れており、数か月前からDBで機能しています。ただし、ごく最近、FillFactorパラメータがNULL
の場合でも、DBでインデックスの再構築を実行した後、FillFactorが90に変更されることに気付きました。
スクリプトを実行する前に、私はsys.indexes
すべてのインデックスのFillFactorが0でしたが、スクリプトが完了後にFillFactorを90に変更した理由がわかりません。これにより、データベースに多くの問題が発生しました。
これが、FillFactorが90に変更されるIndexOptimizeスクリプトの意図された動作であるかどうかを知っていますか?
これが私が実行したものです:
EXECUTE dbo.IndexOptimize
@Databases = 'dbname',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@LogToTable = 'Y'
Olaのスクリプトは、@FillFactor
変数に値を割り当てた場合にのみ、Fill Factorを変更します。
IF @FillFactor IS NOT NULL AND @CurrentIsPartition = 0 AND @CurrentIndexType IN(1,2,3,4) SET @CurrentCommand13 = @CurrentCommand13 + ', FILLFACTOR = ' + CAST(@FillFactor AS nvarchar)
つまり、誰かを意味します:
ストアドプロシージャをスクリプト化して、誰かがデフォルト値を変更したかどうかを確認できます。
または、dbo.CommandLog
テーブルをクエリして、Fill Factorが90でREBUILD
コマンドが実行されたかどうかを確認することもできます。
SELECT *
FROM dbo.CommandLog AS cl
WHERE cl.CommandType = 'ALTER_INDEX'
AND cl.Command LIKE '%FILLFACTOR%'
別のスクリプトまたはGUIを使用して誰かが変更した場合、追跡するのははるかに困難になります。