SQL Server - Re-INDEXAR Tablas

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Re-INDEXAR Tablas

Publicado por JL (3 intervenciones) el 02/01/2019 04:48:16
Hola que tal compañeros antes que nada los mejores deseos para este nuevo año que inicia.

Bueno tengo la siguiente inquietud , la verdad es que nunca había revisado el porcentaje promedio de fragmentación que aparece al consultar en las tablas sys.dm_db_index_physical_stats y la sys.indexes , para los que ya hayan realizado la re-indexación se les haran lo mas familiar esas tablas .

El caso es que apenas ando validando esas tablas y ya al correrlo en mi BD pues ya me despliega que muchas de los indices su porcentaje promedio de fragmentación esta por encima de 95.4022988505747 por lo que estuve leyendo ya si es mayor de 31 % van a empezar los problemas de rendimiento y en este caso pues no es la excepción , como comento no las había revisado y tampoco había monitoreado una re-indexación

entonces la idea es que fuera checando indice por indice e ir validando cuanto bajaba pero me tope con esto,

EJEMPLO:

El nombre de la tabla e indice lo sacaba con este query asi como su porcentaje promedio de fragmentación

DECLARE @BASE AS INT=(SELECT DB_ID() AS [Database ID])
SELECT a.index_id, QUOTENAME(b.name), avg_fragmentation_in_percent,QUOTENAME(o.name)
FROM sys.dm_db_index_physical_stats (@BASE, NULL, NULL, NULL, NULL) AS a
JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id INNER JOIN sys.objects o
ON o.object_id =a.object_id

y Ya para la re-indexación de aquellos indices que tenían mayores a 31% , utilice este query

DECLARE @Name_index varchar(255)='[_dta_index_PROVEEDOR_7_157243615__K5_K1_K7]'
DECLARE @Tabla varchar(255)='master.proveedor'
DECLARE @Command varchar(4000)=(N'ALTER INDEX ' + @Name_index + N' ON ' + @Tabla + N' REBUILD ')
EXEC(@Command)


Bueno el caso es que al ejecutar y volver a validar en 2 indices obtuve lo siguiente:

El indice que tiene llave primaria y es CLUSTERED , estaba así con 98.5 de % de fragmentación

index-id name_idex avg_fragmentacion_in_percent
1 [PK_PROVEEDOR] 98.5688729874776

pero cuando ejecuto el query y valido en que porcentaje quedo me aparece 2 indices uno con con 0 % de fragmentación y otro con 0.119047619047619 % de fragmentación

index-id name_idex avg_fragmentacion_in_percent
1 [PK_PROVEEDOR] 0.119047619047619
1 [PK_PROVEEDOR] 0

entonces me quede de what???
porque de entrada me surgen 2 dudas la primera es

Porque ahora me aparecen 2 indices ???


y segunda es normal que baje la fragmentación a 0 ???



No obstante no me quería quedar con la duda y agarre otro indice y lo re-indexe con el mismo query

Solo que este indice es NON-CLUSTERED y no tiene llave ,estaba así con 98.8 de % de fragmentación

index-id name_idex avg_fragmentacion_in_percent
19 [_dta_index_PROVEEDOR_7_157243615__K5_K1_K7] 98.8688629874672

cuando ejecuto el query y valido en que porcentaje quedo me aparece así en 0 % de fragmentación

index-id name_idex avg_fragmentacion_in_percent
19 [_dta_index_PROVEEDOR_7_157243615__K5_K1_K7] 0


en este caso ya no me salieron 2 indices solo me salio el mismo pero me lo deja en 0

entonces es normal que lo deje en 0 al realizar la re-indexación?

no le creo otro indice porque este no tenia llave primaria??



La verdad es que estoy confundido alguno que haya realizado estas tareas de optimización podría comentarme su experiencia por favor , que ya no se si seguirle o mejor buscar otro query
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder