web-dev-qa-db-ja.com

FillFactor:Ola HallengrenによるIndexOptimizeスクリプト

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'
6
Nancy

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)

つまり、誰かを意味します:

  1. デフォルト値として90を使用するようにストアード・プロシージャーを変更しました。
  2. メンテナンスからアウトオブバンドで実行しました。または
  3. 別のスクリプトまたはGUIを使用して値を変更しました。

ストアドプロシージャをスクリプト化して、誰かがデフォルト値を変更したかどうかを確認できます。

NUTS

または、dbo.CommandLogテーブルをクエリして、Fill Factorが90でREBUILDコマンドが実行されたかどうかを確認することもできます。

SELECT *
FROM dbo.CommandLog AS cl
WHERE cl.CommandType = 'ALTER_INDEX'
AND cl.Command LIKE '%FILLFACTOR%'

別のスクリプトまたはGUIを使用して誰かが変更した場合、追跡するのははるかに困難になります。

13
Erik Darling