Tecnología

Inicio

Cómo Defrag una base de datos de MSSQL

Una base de datos de la fragmentación se produce cuando el orden lógico del índice de la base de datos no se corresponde con la asignación física de los datos en el disco. A medida que cambian los datos dentro de la base de datos, las tablas de índice de la base de datos se dispersan por todo el disco. Aumenta el tiempo que necesita para acceder a los datos, lo que resulta en una disminución del rendimiento de aplicaciones. Los comandos de la consola de base de datos MSSQL le permiten reconstruir o índices de desfragmentación. Es necesario utilizar la instrucción DBCC DBEREINDEX para desfragmentar un índice de base de datos MSSQL.

Instrucciones

1 Haga clic en el botón "Inicio" de Windows y seleccione "Todos los programas". Haga clic para abrir la "Consola de administración de SQL."

2 Introduzca las siguientes instrucciones SQL en la ventana de la consola:

SET NOCOUNT ON;
DECLARE VARCHAR @tablename (255);
DECLARE VARCHAR @execstr (400);
DECLARE @objectid int;
DECLARE @indexid int;
DECLARE decimal @frag;
DECLARE decimal @maxfrag;

SELECT @maxfrag = 30,0;

DECLARE CURSOR PARA tablas
SELECT TABLE_SCHEMA + '.' + TABLE_NAME
DE INFORMATION_SCHEMA.TABLES
DONDE TABLE_TYPE = 'La tabla BASE';

CREAR TABLA #fraglist (
Char objectname (255),
ObjectId int,
Char IndexName (255),
IndexId int,
int lvl,
CountPages int,
CountRows int,
MinRecSize int,
MaxRecSize int,
AvgRecSize int,
ForRecCount int,
Extensiones INT,
ExtentSwitches int,
AvgFreeBytes int,
AvgPageDensity int,
decimal ScanDensity,
BestCount int,
ActualCount int,
decimal LogicalFrag,
ExtentFrag decimal);

mesas abiertas;

FETCH SIGUIENTE
a partir de tablas
EN @tablename;

MIENTRAS @@ FETCH_STATUS = 0
EMPEZAR
#fraglist INSERT INTO
EXEC ( 'DBCC SHOWCONTIG (' '' + @tablename + '' ')

WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS');

FETCH SIGUIENTE

FROM tables
INTO @tablename;

FIN;

mesas cercanas;
DEALLOCATE tablas;

DECLARE CURSOR PARA índices
SELECT objectname, ObjectId, IndexId, LogicalFrag
DE #fraglist
DONDE LogicalFrag> = @maxfrag

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

índices abiertos;

FETCH SIGUIENTE
DESDE índices
EN @tablename, @objectid, @indexid, @frag;

MIENTRAS @@ FETCH_STATUS = 0
EMPEZAR
PRINT "Ejecución de DBCC INDEXDEFRAG (0, '+ RTRIM (@tablename) +',

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

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

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

EXEC (@execstr);

FETCH SIGUIENTE

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

FIN;

CERRAR índices;
DEALLOCATE índices;

DROP #fraglist TABLA;
IR

3 Haga clic en "Archivo" y seleccione "Ejecutar" para desfragmentar el índice de base de datos MSSQL.