web-dev-qa-db-ja.com

IndexOptimize-構成

最近、Ola Hallengrenのメンテナンススクリプトに切り替えて、顧客のSQL Serverインスタンスへの MaintenanceSolution.sql の展開を自動化しました。

ジョブにこれらのパラメーターを設定する必要がありますIndexOptimize-USER_DATABASES

  • @UpdateStatistics = 'ALL'

  • @OnlyModifiedStatistics = 'Y'

これらのパラメーターがMaintenanceSolution.sqlにあることがわかります。

enter image description here

MaintenanceSolution.sqlの上記のパラメーターの値を変更した後

@UpdateStatistics nvarchar(max) = 'ALL'

@OnlyModifiedStatistics nvarchar(max) = 'Y'

その後、実行すると、どちらも表示されません@UpdateStatistics = 'ALL'または@OnlyModifiedStatistics = 'Y'が追加されましたジョブステップのプロパティ-IndexOptimize-USER_DATABASES

enter image description here

私の質問は:

  1. ジョブのコマンドに「統計」オプションが表示されないのはなぜですか?
  2. MaintenanceSolution.sqlを直接編集するのは間違っていますか?
  3. クエリを使用してこれらのパラメーターをジョブに追加する方法はありますか?
6
William

ジョブのコマンドに「統計」オプションが表示されないのはなぜですか?

プロシージャコールでデフォルトパラメータを更新したからです。つまり、これらのパラメータなしでプロシージャを呼び出すと、.

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]
7
Randi Vertongen

ジョブにパラメーターを追加するだけで、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'

2
Yannick Liekens