首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FillFactor: IndexOptimize脚本

FillFactor: IndexOptimize脚本
EN

Database Administration用户
提问于 2017-10-03 19:08:22
回答 2查看 1.3K关注 0票数 6

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

在执行脚本之前,我检查了所有索引的sys.indexes有0的FillFactor,但我不知道为什么脚本完成后将FillFactor更改为90。这在数据库中引起了许多问题。

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

以下是我执行的任务:

代码语言:javascript
复制
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'
EN

回答 2

Database Administration用户

发布于 2017-10-03 19:19:54

Ola的脚本只有在为@FillFactor变量赋值时才会更改填充因子。

代码语言:javascript
复制
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更改值。

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

或者,您可以查询dbo.CommandLog表,以查看是否使用填充因子90运行了REBUILD命令。

代码语言:javascript
复制
SELECT *
FROM dbo.CommandLog AS cl
WHERE cl.CommandType = 'ALTER_INDEX'
AND cl.Command LIKE '%FILLFACTOR%'

如果有人通过使用不同的脚本或GUI来更改它,那么跟踪起来就会困难得多。

票数 13
EN

Database Administration用户

发布于 2021-08-01 06:26:54

在我的例子中,在SSMS服务器报告“架构更改历史”中,我看到表在夜间被删除和重新创建。我找到了那份工作然后进行了程序。果然,每晚都要重新构建表,而不指定FILLFACTOR (从而使用服务器默认值)。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/187557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档