Come deframmentare un database MSSQL

May 14

Una frammentazione del database si verifica quando l'ordine logico dell'indice database non corrisponde alla ripartizione fisica dei dati sul disco. Come le modifiche ai dati all'interno del database, le tabelle di indice del database diventano sparsi in tutto il disco. Aumenta il tempo necessario per accedere ai dati, con conseguente prestazioni delle applicazioni è diminuito. I comandi della console di database MSSQL consentono di ricostruire o indici di deframmentazione. È necessario utilizzare l'istruzione DBCC DBEREINDEX di deframmentare un indice di database MSSQL.

istruzione

1 Fare clic sul pulsante "Start" di Windows e selezionare "Tutti i programmi". Fare clic per aprire il "SQL Management Console."

2 Inserire le seguenti istruzioni SQL nella finestra della console:

SET NOCOUNT ON;
DICHIARARE @TableName varchar (255);
DICHIARARE @execstr varchar (400);
DECLARE @objectid int;
DECLARE @indexid int;
DICHIARARE @frag decimale;
DICHIARARE @maxfrag decimale;

SELEZIONE @maxfrag = 30,0;

DICHIARARE tavoli CURSORE PER
SELEZIONE TABLE_SCHEMA + '.' + TABLE_NAME
DA INFORMATION_SCHEMA.TABLES
DOVE TABLE_TYPE = 'tabella di base';

CREATE TABLE #fraglist (
ObjectName char (255),
ObjectId int,
IndexName char (255),
IndexId int,
Lvl int,
CountPages int,
CountRows int,
MinRecSize int,
MaxRecSize int,
AvgRecSize int,
ForRecCount int,
Estensioni INT,
ExtentSwitches int,
AvgFreeBytes int,
AvgPageDensity int,
ScanDensity decimale,
BestCount int,
ActualCount int,
LogicalFrag decimale,
ExtentFrag decimale);

tavoli aperti;

FETCH AVANTI
Dalle tabelle
IN @TableName;

MENTRE @@ FETCH_STATUS = 0
INIZIO
INSERT INTO #fraglist
EXEC ( 'DBCC SHOWCONTIG (' '' + @TableName + '' ')

WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS');

FETCH AVANTI

FROM tables
INTO @tablename;

FINE;

tavoli CLOSE;
tavoli DEALLOCATE;

DICHIARARE indici CURSORE PER
SELEZIONE ObjectName, ObjectId, IndexId, LogicalFrag
DA #fraglist
DOVE LogicalFrag> = @maxfrag

AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0;

indici aperti;

FETCH AVANTI
DA indici
IN @TableName, @objectid, @indexid, @frag;

MENTRE @@ FETCH_STATUS = 0
INIZIO
STAMPA 'esecuzione di DBCC INDEXDEFRAG (0,' + RTRIM (@TableName) + ',

' + RTRIM(@indexid) + ') - fragmentation currently '
+ RTRIM(CONVERT(varchar(15),@frag)) + '%';

SELEZIONE @execstr = 'DBCC INDEXDEFRAG (0,' + RTRIM (@objectid) + ',

' + RTRIM(@indexid) + ')';

EXEC (@execstr);

FETCH AVANTI

FROM indexes
INTO @tablename, @objectid, @indexid, @frag;

FINE;

indici chiudono;
indici DEALLOCATE;

DROP TABLE #fraglist;
ANDARE

3 Fai clic su "File" e selezionare "Esegui" per deframmentare l'indice di database MSSQL.