En database fragmentering oppstår når den logiske rekkefølgen av databasen indeksen ikke samsvarer med den fysiske fordeling av dataene på disken . Som dataene endres i databasen , blir indeksen tabellene i databasen spredt over disk . Det øker den tiden du trenger for å få tilgang til data , som resulterer i redusert applikasjoner ytelse. De MSSQL database konsoll kommandoer tillate deg å gjenoppbygge eller bedra indekser. Du må bruke DBCC DBEREINDEX uttalelse å bedra en MSSQL database indeksen. Instruksjoner
en
Klikk på "Start "-knappen i Windows og velg " Alle programmer". Klikk for å åpne
2
Skriv inn følgende SQL-setninger i konsollen vinduet "SQL Management Console . " :
SET nocount PÅ;
erklærer @ tablename varchar ( 255 ) ;
erklærer @ execstr varchar ( 400 ) ;
erklærer @ objectID int ;
erklærer @ indexid int ;
erklærer @ frag desimal ;
erklærer @ MaxFrag desimal ;
SELECT @ MaxFrag = 30.0 ; ' . '
DECLARE tabeller MARKØREN FOR
SELECT TABLE_SCHEMA + + TABLE_NAME
FRA INFORMATION_SCHEMA.TABLES
HVOR TABLE_TYPE = 'BASE TABLE ';
CREATE TABLE # fraglist (
ObjectName char ( 255 ) ,
objectID int , etter
IndexName char ( 255 ) , IndexId
int , etter
Lvl int ,
CountPages int ,
CountRows int , etter
MinRecSize int , etter
MaxRecSize int , etter
AvgRecSize int , etter
ForRecCount int ,
Extents int ,
ExtentSwitches int ,
AvgFreeBytes int , etter
AvgPageDensity int , etter
ScanDensity desimal , etter
BestCount int , etter < p> ActualCount int , etter
LogicalFrag desimal , etter
ExtentFrag desimal) ;
ledige bord ;
HENT NESTE
FROM tabeller
INTO @ tablename ;
MENS @ @ FETCH_STATUS = 0
BEGIN
INSERT INTO # fraglist
EXEC (' DBCC SHOWCONTIG ( '' ' + @ tablename + ''' )
MED FAST, TABLERESULTS , ALL_INDEXES , NO_INFOMSGS ');
HENT NESTE
FRA tabeller
INTO @ tablename ;
END ;
CLOSE tabeller;
deallocate tabeller;
DECLARE indekser CURSOR FOR
SELECT ObjectName , objectID , IndexId , LogicalFrag
FRA # fraglist
WHERE LogicalFrag > = @ MaxFrag
OG INDEXPROPERTY ( objectID , IndexName , ' IndexDepth ') > 0 ;
ÅPNE indekser ,
HENT NESTE
FRA indekser
INTO @ tablename , @ objectID , @ indexid , @ frag ;
MENS @ @ FETCH_STATUS = 0
BEGIN
PRINT ' Utfører DBCC INDEXDEFRAG ( 0 , ' + RTRIM ( @ tablename ) + ' , etter
' + RTRIM ( @ indexid ) + ') - fragmentering tiden '
+ RTRIM ( konvertere ( varchar ( 15 ) , @ frag ) ) + '% ';
SELECT @ execstr = ' DBCC INDEXDEFRAG ( 0 , '+ RTRIM ( @ objectID ) + ' , etter
' + RTRIM ( @ indexid ) + ') ';
EXEC ( @ execstr ) ;
HENT NESTE
FRA indekser
INTO @ tablename , @ objectID , @ indexid , @ frag ;
END ;
CLOSE indekser ;
deallocate indekser ;
< p> DROP TABLE # fraglist ; .
GO
3
Klikk på "File " og velg " Kjør" for å defragmentere MSSQL database indeksen