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
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


0