begin process at 2008 05 15 22:09:30
1 173 058 membres
657 nouveaux aujourd'hui
13 969 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SQL SERVER - PROCÉDURE STOCKÉE METTANT À JOUR TOUTES LES STATISTIQUES DE TOUTES LES BASES DU SERVEUR


Information sur la source

Catégorie :Divers Classé sous : sqlserver, procedure, statistique, update Niveau : Expert Date de création : 18/02/2005 Date de mise à jour : 17/01/2007 18:07:55 Vu : 9 058

Note :
7,67 / 10 - par 3 personnes
7,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note


Description

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

  • ------------------------------------------------------------------------------------------------------
  • 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
------------------------------------------------------------------------------------------------------
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___)
17 janvier 2007 18:07:56 :
Modification de la requête
    Aucun commentaire pour le moment.

Ajouter un commentaire

Discussions en rapport avec ce code source

Update par fdouieb

update par ehmarc

Demander une info dans une procedure par gregoire2008

Lire fichier texte dans procedure stockée par laurent57150

sqlserver par sidalilo

problème pour mes parametres. par gegelacarott

update avec jointure par jesscolor

Problème procedure sql par toomsbzh

Comment créer une procedure avec mysql par gregoire2008

procedure select par abdoulax

Appels d'offres

Pub



Snippets en rapport

CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS