Sql-Server

IndexOptimize - 配置

  • August 21, 2019

我們最近切換到 O​​la 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'添加:

在此處輸入圖像描述

我的問題是:

  1. 為什麼“統計”選項不出現在作業的命令中?
  2. 為此直接編輯MaintenanceSolution.sql是錯誤的嗎?
  3. 有沒有辦法使用查詢將這些參數添加到作業中?

為什麼“統計”選項不出現在作業的命令中?

因為您更新了過程呼叫中的預設參數。這意味著如果您在沒有這些參數的情況下呼叫過程,EG

EXECUTE dbo.IndexOptimize
@Databases ='USER_DATABASES',
@LogToTable='Y'

這些預設參數 @UpdateStatistics = 'ALL'& @OnlyModifiedStatistics = 'Y'將被使用。

設計使這些工作步驟不會改變。

為此直接編輯MaintenanceSolution.sql是錯誤的嗎?

取決於你的要求。

預設情況下,在沒有指定參數的情況下呼叫過程時不會更新統計資訊。

如果您在過程中更改這些@OnlyModifiedStatistics&@UpdateStatistics參數,則在呼叫過程時將更新所有修改的統計資訊,而無需添加這些參數。

有沒有辦法使用查詢將這些參數添加到作業中?

當然,將作業步驟更改為:

EXECUTE dbo.IndexOptimize
@Databases ='USER_DATABASES',
@LogToTable='Y',
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y';

編輯

因此,即使我在作業步驟中沒有看到“@UpdateStatistics = ‘ALL’”和“@OnlyModifiedStatistics = ‘Y’”,並且我已將其更新為 MaintenanceSolution.sql 中的預設參數……參數仍然是用過的 ?–

NULL當然,使用參數的預設參數執行以下過程會@UpdateStatistics立即執行

EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = NULL,
@FragmentationHigh = NULL
--,@UpdateStatistics = 'ALL'

日期和時間開始

Date and time: 2019-08-21 14:49:22

結束日期和時間:

Date and time: 2019-08-21 14:49:22

未找到統計更新語句。

如果過程本身沒有更改預設參數,則此語句將不執行索引優化和更新統計資訊。

@UpdateStatistics在小型數據庫上更改過程中的參數並重新執行它

所有使用者數據庫都需要很長時間;)

@UpdateStatistics nvarchar(max) = 'ALL',

在一個小型數據庫上重新執行該過程

開始日期和時間:

Date and time: 2019-08-21 14:50:16

結束日期和時間:

Date and time: 2019-08-21 14:50:23

消息選項卡中的語句之一:

UPDATE STATISTICS [Database].[dbo].[test] [UIX_dbo_test_RecordType]

引用自:https://dba.stackexchange.com/questions/245852