FillFactor:Ola Hallengren 的 IndexOptimize 脚本

Nan*_*ncy 6 index sql-server ola-hallengren

我们正在使用 Ola Hallengren 的 IndexOptimize 脚本在 SQL Server 2008 和 2012 上重建索引。这些维护脚本非常好,并且已经为我们的数据库工作了几个月。但是,最近我注意到它在对数据库执行索引重建后将 FillFactor 更改为 90,即使 FillFactor 参数为NULL.

在执行脚本之前,我检查sys.indexes了所有索引的 FillFactor 是否为 0,但我不确定为什么脚本在完成后将 FillFactor 更改为 90。这在数据库上造成了很多问题。

您是否知道这是否是 IndexOptimize 脚本中 FillFactor 更改为 90 的预期行为?

这是我执行的:

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'
Run Code Online (Sandbox Code Playgroud)

Eri*_*ing 13

如果您为@FillFactor变量赋值,Ola 的脚本只会更改填充因子。

IF @FillFactor IS NOT NULL AND @CurrentIsPartition = 0 AND @CurrentIndexType IN(1,2,3,4) SET @CurrentCommand13 = @CurrentCommand13 + ', FILLFACTOR = ' + CAST(@FillFactor AS nvarchar)
Run Code Online (Sandbox Code Playgroud)

这意味着某人:

  1. 修改存储过程使用90作为默认值;
  2. 从维护运行带外;或者
  3. 使用不同的脚本或 GUI 更改了值。

您可以编写存储过程的脚本以查看是否有人更改了默认值,

坚果

或者您可以查询dbo.CommandLog表以查看是否以REBUILD90 的填充因子运行命令。

SELECT *
FROM dbo.CommandLog AS cl
WHERE cl.CommandType = 'ALTER_INDEX'
AND cl.Command LIKE '%FILLFACTOR%'
Run Code Online (Sandbox Code Playgroud)

如果有人使用不同的脚本或 GUI 对其进行了更改,则追踪起来会困难得多。