Sql server - procédure stockée mettant à jour toutes les statistiques de toutes les bases du serveur

Contenu du snippet

Dans le cadre de taches administratives il est utile de pouvoir mettre à jour les statistiques des bases de données afin que les requettes des utilisateurs se fassent le plus rapidement possible.
L'évaluation du plan d'exécution de SQL Server est fait suivant l'intérrogation de ces statistiques. Donc si celles-ci ne sont pas correctes au départ, les plans d'exécution des requettes seront faux et celles-ci seront longues à s'exécuter.

Dans cette optique, voila une Procédure stockée qui utilise un Curseur afin de boucler sur toutes les bases du serveur et de mettre à jour chaque base en exécutant un procédure stockée système : "sp_updatestats"

Vous pouvez ensuite planifier l'exécution de cette procédure toutes les semaines voire tous les mois, via les jobs de SQL Agent.

Source / Exemple :


------------------------------------------------------------------------------------------------------
CREATE PROCEDURE dbo.SP_System_MiseAJourStatistiquesIndexes
/* 
	Permet de mettre à jour toutes les statistiques des Indexes 
 	de toutes les bases du serveur SQL Server 

  • /
AS DECLARE @name sysname DECLARE @LaRequette varchar(8000) DECLARE @DateJour varchar(20) SET @DateJour = REPLACE(CONVERT(VARCHAR, GetDate(), 102), '.', '_') PRINT '---------------------------------------------------------------------' PRINT ' DATE DE LA MISE A JOUR DES STATISTIQUES LANCEE : '+ @DateJour PRINT '---------------------------------------------------------------------' DECLARE TESTCURSEUR CURSOR FOR SELECT Master.dbo.sysdatabases.name FROM Master.dbo.sysdatabases WHERE Master.dbo.sysdatabases.name NOT IN ('tempdb', 'model', 'pubs') OPEN TESTCURSEUR FETCH NEXT FROM TESTCURSEUR INTO @name WHILE @@FETCH_STATUS = 0 BEGIN PRINT '' PRINT '---------------------------------------------------------------------' PRINT ' STATISTIQUES MISE A JOUR SUR LA BASE DE DONNEES : '+ @name PRINT '---------------------------------------------------------------------' SET @LaRequette = 'USE ['+ @name +'] exec sp_updatestats' PRINT 'Requette : '+ @LaRequette EXECUTE (@LaRequette) PRINT '---------------------------------------------------------------------' FETCH NEXT FROM TESTCURSEUR INTO @name END CLOSE TESTCURSEUR DEALLOCATE TESTCURSEUR GO ------------------------------------------------------------------------------------------------------ -- Elle est utilisable avec la commande suivante : exec dbo.SP_System_MiseAJourStatistiquesIndexes

Conclusion :


En espérant que cette SP vous rende service.

Bon coding

Romelard Fabrice (Alias F___)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.