Wil*_*iam 6 sql-server maintenance ola-hallengren
我们最近切换到 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'
Run Code Online (Sandbox Code Playgroud)
然后执行,我在Job Step 属性 - IndexOptimize - USER_DATABASES 中没有看到@UpdateStatistics = 'ALL'或@OnlyModifiedStatistics = 'Y'添加:
我的问题是:
为什么“统计”选项没有出现在作业的命令中?
因为您更新了过程调用中的默认参数。这意味着如果你调用没有这些参数的过程,EG
EXECUTE dbo.IndexOptimize
@Databases ='USER_DATABASES',
@LogToTable='Y'
Run Code Online (Sandbox Code Playgroud)
将使用这些默认参数 @UpdateStatistics = 'ALL'& @OnlyModifiedStatistics = 'Y'。
这些作业步骤未更改是设计使然。
为此直接编辑MaintenanceSolution.sql有错吗?
取决于您的要求。
默认情况下,在未指定参数的情况下调用过程时,不会更新统计信息。
如果您在过程中更改这些@OnlyModifiedStatistics&@UpdateStatistics参数,则在不添加这些参数的情况下调用该过程时,将更新所有修改的统计信息。
有没有办法使用查询将这些参数添加到作业中?
当然,将作业步骤更改为:
EXECUTE dbo.IndexOptimize
@Databases ='USER_DATABASES',
@LogToTable='Y',
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y';
Run Code Online (Sandbox Code Playgroud)
编辑
因此,即使我在作业步骤中没有看到“@UpdateStatistics = 'ALL'”和“@OnlyModifiedStatistics = 'Y'”并且我已将其更新为 MaintenanceSolution.sql 中的默认参数......参数仍将是用过的 ?——
当然,使用NULL参数的默认参数执行以下过程会@UpdateStatistics立即运行
EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = NULL,
@FragmentationHigh = NULL
--,@UpdateStatistics = 'ALL'
Run Code Online (Sandbox Code Playgroud)
日期和时间开始
Date and time: 2019-08-21 14:49:22
Run Code Online (Sandbox Code Playgroud)
日期和时间结束:
Date and time: 2019-08-21 14:49:22
Run Code Online (Sandbox Code Playgroud)
未找到任何统计更新语句。
如果过程本身没有更改默认参数,则此语句将不执行索引优化和更新统计信息。
更改过程中的@UpdateStatistics参数并在小型数据库上重新运行它
所有用户数据库花费的时间太长;)
@UpdateStatistics nvarchar(max) = 'ALL',
Run Code Online (Sandbox Code Playgroud)
在一个小型数据库上重新运行该过程
日期和时间开始:
Date and time: 2019-08-21 14:50:16
Run Code Online (Sandbox Code Playgroud)
日期和时间结束:
Date and time: 2019-08-21 14:50:23
Run Code Online (Sandbox Code Playgroud)
消息选项卡中的语句之一:
UPDATE STATISTICS [Database].[dbo].[test] [UIX_dbo_test_RecordType]
Run Code Online (Sandbox Code Playgroud)