A fragmentation de base de données se produit lorsque l'ordre logique de l'index de base de données ne correspond pas à la répartition physique des données sur le disque. Comme les changements de données dans la base de données , les tables d'index de la base de données dispersés sur tout le disque. Il augmente le temps nécessaire pour accéder aux données , ce qui entraîne une baisse des performances des applications. Les commandes de la console de base de données MSSQL vous permettent de reconstruire ou de défragmenter les index. Vous devez utiliser l'instruction DBCC DBEREINDEX de défragmenter un index de base de données MSSQL . Instructions
1
Cliquez sur le bouton "Démarrer " de Windows et sélectionnez « Tous les programmes ». Cliquez pour ouvrir la
2
Entrez les instructions SQL suivantes dans la fenêtre de console " console de gestion SQL. " :
SET NOCOUNT ON ;
DECLARE @ nomtable varchar ( 255);
DECLARE @ execstr varchar (400);
DECLARE @ objectid int;
DECLARE @ indexid int;
DECLARE @ frag décimal ;
DECLARE @ MaxFrag décimal ;
SELECT @ MaxFrag = 30,0 ; '.'
DECLARE CURSOR tables pour ma
SELECT TABLE_SCHEMA + + TABLE_NAME
DE INFORMATION_SCHEMA.TABLES
OÙ TABLE_TYPE = ' BASE TABLE' ;
CREATE TABLE # fraglist (produits
ObjectName char ( 255), < br > ObjectId
int , AB
IndexName char ( 255) , AB
IndexId int , AB
Lvl int , AB
CountPages int , AB
CountRows int , AB
MinRecSize int , AB
MaxRecSize int , AB
AvgRecSize int , AB
ForRecCount int , AB
Etendu int , AB
ExtentSwitches int , AB
AvgFreeBytes int , AB
AvgPageDensity int , AB
ScanDensity décimal , AB
BestCount int , AB < p> ActualCount int , AB
décimal LogicalFrag , AB
ExtentFrag décimal) ;
tables ouvertes ;
CHERCHER APRÈS
à partir des tableaux
INTO @ nomtable ;
alors que @ @ FETCH_STATUS = 0
BEGIN
INSERT INTO # fraglist
EXEC (' DBCC SHOWCONTIG ( '' ' + @ nomtable + ''')
FAST , TABLERESULTS , ALL_INDEXES , NO_INFOMSGS ');
CHERCHER APRÈS
à partir des tableaux
INTO @ nomtable ;
END;
tables rapprochées ;
DEALLOCATE tables ;
DECLARE indices de curseur pour
SELECT ObjectName , ObjectId , IndexId , LogicalFrag
de # fraglist
OÙ LogicalFrag > = @ MaxFrag
ET INDEXPROPERTY ( ObjectId , IndexName , « IndexDepth ') > 0;
open indexes
;
CHERCHEZ SUIVANT
à partir des indices
INTO @ nomtable , @ objectid , @ indexid , @ frag ;
alors que @ @ FETCH_STATUS = 0
BEGIN
PRINT ' exécution DBCC INDEXDEFRAG (0 ,' + RTRIM (@ nomtable ) + ' , AB
' + RTRIM (@ indexid ) + ' ) - fragmentation actuellement '
+ RTRIM ( convert ( varchar ( 15) , @ frag )) + '% ' ;
SELECT @ execstr =' DBCC INDEXDEFRAG (0 , '+ RTRIM (@ objectid ) + ' , AB
' + RTRIM (@ indexid ) + ')' ;
EXEC ( @ execstr ) ;
CHERCHER APRÈS
DE indices
eN @ nomtable , @ objectid , @ indexid , @ frag ;
END;
indices FERMER
;
DEALLOCATE indices ;
< p> DROP TABLE # fraglist ; .
GO
3
Cliquez sur "Fichier" et sélectionner "Exécuter" pour défragmenter l'index de base de données MSSQL