IndexOptimize - 配置

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'添加:

在此处输入图片说明

我的问题是:

  1. 为什么“统计”选项没有出现在作业的命令中?
  2. 为此直接编辑MaintenanceSolution.sql有错吗?
  3. 有没有办法使用查询将这些参数添加到作业中?

Ran*_*gen 7

为什么“统计”选项没有出现在作业的命令中?

因为您更新了过程调用中的默认参数。这意味着如果你调用没有这些参数的过程,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)