web-dev-qa-db-fra.com

IndexOptimize - Configuration

Nous sommes récemment passés au script de maintenance d'Ola Hallengren et avons automatisé le déploiement de MaintenanceSolution.sql vers l'instance SQL Server de nos clients.

Nous devons définir ces paramètres pour le travail IndexOptimize - USER_DATABASES :

  • @UpdateStatistics = 'ALL'

  • @OnlyModifiedStatistics = 'Y'

Je vois que ces paramètres sont présents dans MaintenanceSolution.sql :

enter image description here

Après avoir modifié les valeurs des paramètres mentionnés ci-dessus dans MaintenanceSolution.sql en

@UpdateStatistics nvarchar(max) = 'ALL'

@OnlyModifiedStatistics nvarchar(max) = 'Y'

puis exécutez, je ne vois pas non plus @UpdateStatistics = 'ALL' ou @OnlyModifiedStatistics = 'Y' ajouté dans Propriétés de l'étape du travail - IndexOptimize - USER_DATABASES :

enter image description here

Mes questions sont:

  1. Pourquoi les options "statistiques" n'apparaissent-elles pas dans la commande du travail?
  2. Est-ce mal d'éditer MaintenanceSolution.sql directement pour cela?
  3. Existe-t-il un moyen d'ajouter ces paramètres au travail à l'aide d'une requête?
6
William

Pourquoi les options "statistiques" n'apparaissent-elles pas dans la commande du travail?

Parce que vous avez mis à jour le paramètre par défaut dans l'appel de procédure. Cela signifie que si vous appelez la procédure sans ces paramètres, E.G.

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

que ces paramètres par défaut @UpdateStatistics = 'ALL' & @OnlyModifiedStatistics = 'Y' sera utilisé.

C'est par conception que ces étapes de travail ne sont pas modifiées.

Est-ce mal d'éditer MaintenanceSolution.sql directement pour cela?

Dépend de vos besoins.

Par défaut, aucune statistique ne sera mise à jour lors de l'appel de la procédure sans les paramètres spécifiés.

Si vous modifiez ces @OnlyModifiedStatistics & @UpdateStatistics paramètres dans la procédure, toutes les statistiques modifiées seront mises à jour lors de l'appel de la procédure sans l'ajout de ces paramètres.

Existe-t-il un moyen d'ajouter ces paramètres au travail à l'aide d'une requête?

Bien sûr, changez le jobstep en ceci:

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

MODIFIER

Donc, même si je ne vois pas "@UpdateStatistics = 'ALL'" & "@OnlyModifiedStatistics = 'Y'" dans l'étape du travail et que je l'ai mis à jour en tant que paramètres par défaut dans MaintenanceSolution.sql ... Les paramètres seront toujours utilisé ? -

Bien sûr, exécution de la procédure ci-dessous avec le paramètre NULL par défaut pour le @UpdateStatistics le paramètre s'exécute instantanément

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

Date et heure de début

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

Date et heure de fin:

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

Aucune déclaration de mise à jour des statistiques n'a été trouvée.

Cette instruction ne fera aucune optimisation d'index et aucune statistique de mise à jour si aucun paramètre par défaut n'est modifié sur la procédure elle-même.

Changer le @UpdateStatistics paramètre dans la procédure et relancez-le, sur une petite base de données

Cela prend trop de temps sur toutes les bases de données utilisateur;)

@UpdateStatistics nvarchar(max) = 'ALL',

Réexécution de la procédure sur une petite base de données

Date et heure de début:

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

Date et heure de fin:

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

L'une des instructions de l'onglet messages:

 UPDATE STATISTICS [Database].[dbo].[test] [UIX_dbo_test_RecordType]
7
Randi Vertongen

Vous pouvez simplement ajouter les paramètres au travail, il exécutera simplement l'instruction SQL. Ceci est la documentation officielle, tous les paramètres que vous pouvez ajouter ici à la procédure, il contient également quelques exemples. site Ola hallengren

Par exemple, voici un exemple que j'ai en cours d'exécution maintenant:

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