我们最近切换到 Ola Hallengren 的维护脚本,并自动将MaintenanceSolution.sql部署到客户的 SQL Server 实例。
我们需要为作业IndexOptimize - USER_DATABASES设置这些参数:
@UpdateStatistics = 'ALL'
@OnlyModifiedStatistics = 'Y'
我看到这些参数存在于MaintenanceSolution.sql中:
在我将MaintenanceSolution.sql中上述参数的值更改为
@UpdateStatistics nvarchar(max) = 'ALL'
@OnlyModifiedStatistics nvarchar(max) = 'Y'
然后执行,我在Job Step 属性 - IndexOptimize - USER_DATABASES 中看@UpdateStatistics = 'ALL'
不到或@OnlyModifiedStatistics = 'Y'
添加:
我的问题是:
- 为什么“统计”选项不出现在作业的命令中?
- 为此直接编辑MaintenanceSolution.sql是错误的吗?
- 有没有办法使用查询将这些参数添加到作业中?
因为您更新了过程调用中的默认参数。这意味着如果您在没有这些参数的情况下调用过程,EG
这些默认参数
@UpdateStatistics = 'ALL'
&@OnlyModifiedStatistics = 'Y'
将被使用。设计使这些工作步骤不会改变。
取决于你的要求。
默认情况下,在没有指定参数的情况下调用过程时不会更新统计信息。
如果您在过程中更改这些
@OnlyModifiedStatistics
&@UpdateStatistics
参数,则在调用过程时将更新所有修改的统计信息,而无需添加这些参数。当然,将作业步骤更改为:
编辑
NULL
当然,使用参数的默认参数执行以下过程会@UpdateStatistics
立即运行日期和时间开始
结束日期和时间:
未找到统计更新语句。
如果过程本身没有更改默认参数,则此语句将不执行索引优化和更新统计信息。
@UpdateStatistics
在小型数据库上更改过程中的参数并重新运行它所有用户数据库都需要很长时间;)
在一个小型数据库上重新运行该过程
开始日期和时间:
结束日期和时间:
消息选项卡中的语句之一:
您可以将参数添加到作业中,它只会执行 SQL 语句。这是官方文档,这里的任何参数都可以添加到程序中,它也有一些示例。 奥拉哈伦格伦网站
例如,这是我现在正在运行的一个示例:
EXECUTE dbo.IndexOptimize @Databases = 'USER_DATABASES, @FragmentationLow = NULL, @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationHigh = 'INDEX_REBUILD_OFFLINE', @FragmentationLevel1 = 5, @FragmentationLevel2 = 30, @UpdateStatistics = 'ALL', @OnlyModifiedStatistics = 'Y'