我们使用Ola Hallengren的IndexOptimize脚本在Server 2008和2012年上进行索引重建。这些维护脚本非常好,并且已经为我们的数据库工作了几个月。但是,最近我注意到它在DB上执行索引重建之后将FillFactor更改为90,即使FillFactor参数是NULL。
在执行脚本之前,我检查了所有索引的sys.indexes有0的FillFactor,但我不知道为什么脚本完成后将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'发布于 2017-10-03 19:19:54
Ola的脚本只有在为@FillFactor变量赋值时才会更改填充因子。
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表,以查看是否使用填充因子90运行了REBUILD命令。
SELECT *
FROM dbo.CommandLog AS cl
WHERE cl.CommandType = 'ALTER_INDEX'
AND cl.Command LIKE '%FILLFACTOR%'如果有人通过使用不同的脚本或GUI来更改它,那么跟踪起来就会困难得多。
发布于 2021-08-01 06:26:54
在我的例子中,在SSMS服务器报告“架构更改历史”中,我看到表在夜间被删除和重新创建。我找到了那份工作然后进行了程序。果然,每晚都要重新构建表,而不指定FILLFACTOR (从而使用服务器默认值)。
https://dba.stackexchange.com/questions/187557
复制相似问题