En poursuivant votre navigation sur le site, vous acceptez l’utilisation de cookies pour : [vous identifier / personnaliser votre expérience]. Cliquez ici Pour en savoir plus.

Script SQL : [MS SQL Server] Rebuild / Reorganize automatique des indexes de la base de données

...

ConnexionSe connecterInscriptionS'inscrire
Script mis à jour le 23/07/14

Description du script SQL :

Ce script permet la création d'un procédure stockée qui reconstruit ou réorganise les indexes d'une base de données MICROSOFT SQL Server automatiquement

Droits d'utilisations de ce script SQL :

Je peux revendre ce script
Je peux l'utiliser plusieurs fois
Je peux l'utiliser pour mes clients
Je peux modifier ce script
Je dois citer l'auteur du script
CREATE PROCEDURE [dbo].[ps_reinitIndex]AS-- On ferme le curseur si il n'a pas été fermé correctement précedemmentIF CURSOR_STATUS('local','c_index') >= 0 OR CURSOR_STATUS('global','c_index') > 0 OR CURSOR_STATUS('variable','c_index') > 0BEGIN CLOSE c_index;DEALLOCATE c_index;END-- déclaration du curseur qui parcourt tous les index dont la fragmentation est supérieure à 10% et dont le nombre de pages > 50DECLARE c_index CURSOR FORSELECT  sys.objects.name AS [Table Name],sys.indexes.name AS [Index Name],CAST(avg_fragmentation_in_percent AS DECIMAL (4,2)) AS [Fragmentation Percentage],CONVERT(decimal(18,2), page_count * 8 / 1024.0) AS [Total Index Size (MB)],page_count AS [Page Count]FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED') IndexStatsINNER JOIN sys.objects ON sys.objects.object_id = IndexStats.object_idINNER JOIN SYS.indexesON SYS.indexes.object_id = SYS.OBJECTS.object_id AND IndexStats.index_id = sys.indexes.index_idWHERE avg_fragmentation_in_percent > 10 AND Indexes.index_id > 0 AND page_count > 50;DECLARE @tableName VARCHAR(100);DECLARE @indexName VARCHAR(100);DECLARE @fragmentation DECIMAL (4,2);DECLARE @indexSize DECIMAL (18,2);DECLARE @pageCount INT;DECLARE @alter_query VARCHAR(500);DECLARE @log VARCHAR(100);-- on ouvre un bloc TRY/CATCHBEGIN TRYOPEN c_index;FETCH NEXT FROM c_index INTO @tableName, @indexName, @fragmentation, @indexSize, @pageCount;-- on parcourt le curseurWHILE @@FETCH_STATUS = 0BEGIN-- si la fragmentation est entre 10 et 30% et le nombre de pages de l'index > 100 alors on construit une requête de réorganisation de l'indexIF (@fragmentation BETWEEN 10 AND 30) AND @pageCount > 100BEGINSET @alter_query = 'ALTER INDEX [' + @indexName + '] ON ' + @tableName + ' REORGANIZE;';SET @log = 'Index REORGANIZE: ['  + @indexName + '] . Table: ' + @tableName;END-- Si la fragmentation est > 30% et le nombre de page > 200 alors on construit une requête de reconstuction de l'indexELSE IF @fragmentation > 30 AND @pageCount > 200BEGINSET @alter_query = 'ALTER INDEX [' + @indexName + '] ON ' + @tableName + ' REBUILD;';SET @log = 'Index REBUILD: ['  + @indexName + '] . Table: ' + @tableName;END-- on execute la requêteEXEC(@alter_query);FETCH NEXT FROM c_index INTO @tableName, @indexName, @fragmentation, @indexSize, @pageCount;ENDCLOSE c_index;DEALLOCATE c_index;END TRYBEGIN CATCHIF CURSOR_STATUS('local','c_index') >= 0 OR CURSOR_STATUS('global','c_index') > 0 OR CURSOR_STATUS('variable','c_index') > 0BEGIN CLOSE c_index;DEALLOCATE c_index;END-- si erreur, alors on affiche l'erreur en consolePRINT ERROR_MESSAGE();END CATCH;GO

Créer la procédure, puis executer la. Les indexes sont alors automatiquement reconstruits ou réorganisés.

Les taux de fragmentations et le nombre de pages qui déterminent si les indexes sont reconstruits ou réorganisés peuvent facilement être changés dans les conditions (bloc if/else)

23/07/14 : Première version du script

Questions posées fréquemment
Vous trouverez un bouton "signaler" en haut à droite de cette fiche pour avertir le créateur d'un problème.
Demande de support

Vous rencontrez une difficulté ou avez besoin d'informations supplémentaires sur le script ? N'hésitez pas à contacter l'auteur en cliquant sur le bouton ci-dessous :

Yohann_h

Inscrit le : 23 Juillet 2014

Intérêt : non-renseigné

Voir son profil >>

Nombre de visites du script : 1979

Moyenne de visites des scripts : 13


Prix de vente moyen d'un script : 3 euros

// Commentaires sur ce script SQL :

Veuillez vous inscrire et/ou vous connecter pour laisser un commentaire

Il n'y a pas encore de commentaire sur ce script.
Essayez-le et soyez le premier à laisser votre avis !

Basile : Mascotte chez 1script.frSITE EN TEST PUBLIQUE :
Bonjour, je vous rappelle que le site est en phase de test. En savoir plus ?
Script par Yohann_h
Autres scripts du même membre GRATUIT

PARTAGER CE SCRIPT

Twitter Facebook Google Plus Linkedin email

SECTIONS / CATEGORIES

NEWSLETTER : S'ABONNER

BASIL VOUS EXPLIQUE TOUT

Découvrez 1script.fr en vidéo

SUIVEZ 1SCRIPT.FR

ACCÈS