Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Fragmentacion de Tablas

Estas en el tema de Fragmentacion de Tablas en el foro de SQL Server en Foros del Web. Holas :) leyendo x la red, encontre un articulo de Fragmentacion de tablas, donde detalla una info a analizar y posibles acciones a realizar: 1- ...
  #1 (permalink)  
Antiguo 06/10/2011, 14:37
 
Fecha de Ingreso: febrero-2010
Mensajes: 39
Antigüedad: 14 años, 2 meses
Puntos: 0
Pregunta Fragmentacion de Tablas

Holas :)
leyendo x la red, encontre un articulo de Fragmentacion de tablas, donde detalla una info a analizar y posibles acciones a realizar:

1- creamos esta tabla
CREATE TABLE TBL_SHOWCONTIG (ObjectName CHAR (255),ObjectId INT,IndexName CHAR (255),IndexId INT,Lvl INT,CountPages INT,CountRows INT,MinRecSize INT,MaxRecSize INT,AvgRecSize INT,ForRecCount INT,Extents INT,ExtentSwitches INT,AvgFreeBytes INT,AvgPageDensity INT,ScanDensity DECIMAL,BestCount INT,ActualCount INT,LogicalFrag DECIMAL,ExtentFrag DECIMAL)

2- Luego vamos a una base y la llenamos
INSERT into MonitorDB..tbl_ShowContig (ObjectName,ObjectId,IndexName,IndexId,Lvl,CountPa ges,CountRows,MinRecSize,MaxRecSize,AvgRecSize,For RecCount,Extents,ExtentSwitches,AvgFreeBytes,AvgPa geDensity,ScanDensity,BestCount,ActualCount,Logica lFrag,ExtentFrag)
EXEC ('DBCC SHOWCONTIG WITH ALL_INDEXES, TABLERESULTS')

3- Analizamos, donde IndexID es el tipo de indice y ScanDensity el grado de fragmentacion si es 100 esta OK, por debajo de 75 deberia desfragmentarse.
SELECT ObjectName, IndexName,IndexID,CountRows,ScanDensity
FROM tbl_ShowContig
WHERE ObjectName NOT LIKE 'dt%' AND
ObjectName NOT LIKE 'sys%'
ORDER BY ScanDensity DESC

4- Para reindexar las tablas utilizo
DBCC INDEXDEFRAG

5- Actualizo las estadisticas
UPDATE STATISTICS T_LOCALIDADES WITH FULLSCAN

El problema es que al reindexar, truncar tbl_ShowContig y volver a cargar tbl_ShowContig no veo que halla habido cambios en ScanDensity.
Si alguien lo prueba y encuentra alguna explicacion o solucion se agradece...
  #2 (permalink)  
Antiguo 06/10/2011, 15:34
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Fragmentacion de Tablas

¿Que version de SQL Server manejas?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 06/10/2011, 15:41
 
Fecha de Ingreso: febrero-2010
Mensajes: 39
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Fragmentacion de Tablas

Estoy usando 2008R2
Probe la siguiente instruccion y pude notar el cambio en indices non-clustered :)

ALTER INDEX PK_COD_OCUPACION ON COD_OCUPACION
REBUILD;
  #4 (permalink)  
Antiguo 06/10/2011, 15:42
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Fragmentacion de Tablas

Código SQL:
Ver original
  1. EXEC sp_msforeachtable 'ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 80)'
  2. GO
  3. EXEC sp_updatestats
  4. GO
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 10/10/2011, 18:58
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Fragmentacion de Tablas

A partir de la versión 2005 hay muchas mejoras para obtener información dinámica sobre el estado de la base de datos, puedes leer sobre los objetos con nombre sys.dm_*.

En el caso de índices, tienes la función sys.dm_db_index_physical_stats que justamente está para reemplazar el comando DBCC SHOWCONTIG.

Saludos
  #6 (permalink)  
Antiguo 11/10/2011, 11:36
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Fragmentacion de Tablas

De acuerdo con matanga..
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 11/10/2011, 16:20
 
Fecha de Ingreso: febrero-2010
Mensajes: 39
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Fragmentacion de Tablas

Cita:
Iniciado por matanga Ver Mensaje
A partir de la versión 2005 hay muchas mejoras para obtener información dinámica sobre el estado de la base de datos, puedes leer sobre los objetos con nombre sys.dm_*.

En el caso de índices, tienes la función sys.dm_db_index_physical_stats que justamente está para reemplazar el comando DBCC SHOWCONTIG.

Saludos
Gracias... a leer entonces:):):)

Etiquetas: fragmentacion, select, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:32.