IndexOptimize - 配置
我們最近切換到 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
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]