Cómo actualizar estadísticas y reconstruir índices en SQL Server
Con el tiempo los indices se fragmentan y las estadisticas se desactualizan, y el rendimiento cae. Este mantenimiento periodico lo mantiene sano.
- 1
Mide la fragmentacion de los indices
Antes de actuar, mide. sys.dm_db_index_physical_stats te dice el porcentaje de fragmentacion de cada indice.
SELECT OBJECT_NAME(ips.object_id) AS tabla, i.name AS indice, ips.avg_fragmentation_in_percent AS frag_pct, ips.page_count AS paginas FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') ips JOIN sys.indexes i ON ips.object_id = i.object_id AND ips.index_id = i.index_id WHERE ips.page_count > 1000 ORDER BY frag_pct DESC; - 2
Reorganiza o reconstruye segun el umbral
Regla practica: menos de 5% no hagas nada; entre 5% y 30% REORGANIZE (operacion ligera, online); mas de 30% REBUILD (mas pesado pero deja el indice como nuevo).
-- Fragmentacion moderada: reorganizar ALTER INDEX IX_Ventas_Fecha ON dbo.Ventas REORGANIZE; -- Fragmentacion alta: reconstruir ALTER INDEX IX_Ventas_Fecha ON dbo.Ventas REBUILD WITH (ONLINE = ON); -- ONLINE requiere Enterprise - 3
Actualiza las estadisticas
Las estadisticas guian al optimizador. Si estan viejas, elige planes malos. REBUILD ya las actualiza; tras un REORGANIZE hazlo aparte.
-- Todas las estadisticas de una tabla con muestreo completo UPDATE STATISTICS dbo.Ventas WITH FULLSCAN; -- O de toda la base EXEC sp_updatestats; - 4
Automatiza con una solucion probada
En vez de reinventar el mantenimiento, usa una solucion madura como la de Ola Hallengren, que decide reorganizar/reconstruir por umbral automaticamente.
-- Ejemplo con los scripts de Ola Hallengren (IndexOptimize) EXEC dbo.IndexOptimize @Databases = 'USER_DATABASES', @FragmentationLow = NULL, @FragmentationMedium = 'INDEX_REORGANIZE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @UpdateStatistics = 'ALL';
// el error común
REBUILD OFFLINE bloquea la tabla mientras corre: no lo programes en horario de operacion salvo que uses ONLINE (solo Enterprise). Reconstruir indices genera mucho log: en modelo FULL puede inflar el log y disparar respaldos. No hagas mantenimiento agresivo diario si no lo necesitas; mide primero.
// cuándo conviene un experto
Un plan de mantenimiento mal calibrado consume recursos, llena el log o bloquea la operacion. En dba.mx configuramos mantenimiento por umbrales, en ventanas seguras y con monitoreo, con techo cerrado para que rinda sin estorbar.
Agenda un Escaneo — desde USD $550Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.