最近、Ola Hallengrenのメンテナンススクリプトに切り替えて、顧客のSQL Serverインスタンスへの MaintenanceSolution.sql の展開を自動化しました。
ジョブにこれらのパラメーターを設定する必要がありますIndexOptimize-USER_DATABASES:
@UpdateStatistics = 'ALL'
@OnlyModifiedStatistics = 'Y'
これらのパラメーターがMaintenanceSolution.sqlにあることがわかります。
MaintenanceSolution.sqlの上記のパラメーターの値を変更した後
@UpdateStatistics nvarchar(max) = 'ALL'
@OnlyModifiedStatistics nvarchar(max) = 'Y'
その後、実行すると、どちらも表示されません@UpdateStatistics = 'ALL'
または@OnlyModifiedStatistics = 'Y'
が追加されましたジョブステップのプロパティ-IndexOptimize-USER_DATABASES:
私の質問は:
ジョブのコマンドに「統計」オプションが表示されないのはなぜですか?
プロシージャコールでデフォルトパラメータを更新したからです。つまり、これらのパラメータなしでプロシージャを呼び出すと、.
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のデフォルトパラメータとして更新されている場合でも、パラメータは中古 ? –
確かに、@UpdateStatistics
パラメータのデフォルトのNULL
パラメータを使用して以下の手順を実行すると、即座に実行されます
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',
1つの小さなデータベースでプロシージャを再実行する
開始日時:
Date and time: 2019-08-21 14:50:16
終了日時:
Date and time: 2019-08-21 14:50:23
メッセージタブのステートメントの1つ:
UPDATE STATISTICS [Database].[dbo].[test] [UIX_dbo_test_RecordType]
ジョブにパラメーターを追加するだけで、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'