Base de datos SQL Server 2017 Enterprise CU16 14.0.3076.1
Recientemente intentamos cambiar de los trabajos de mantenimiento predeterminados de Reconstrucción de índice a Ola Hallengren IndexOptimize. Los trabajos predeterminados de reconstrucción de índice se ejecutaban durante un par de meses sin problemas, y las consultas y actualizaciones funcionaban con tiempos de ejecución aceptables. Después de ejecutar IndexOptimizeen la base de datos:
EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y'
El rendimiento fue extremadamente degradado. Una declaración de actualización que tardó 100 ms antes IndexOptimizetomó 78,000 ms después (usando un plan idéntico), y las consultas también estaban realizando varios órdenes de magnitud peor.
Como todavía es una base de datos de prueba (estamos migrando un sistema de producción de Oracle) volvimos a una copia de seguridad y la deshabilitamos IndexOptimizey todo volvió a la normalidad.
Sin embargo, nos gustaría entender qué IndexOptimizees diferente de lo "normal" Index Rebuildque podría haber causado esta degradación extrema del rendimiento para asegurarnos de evitarlo una vez que empezamos la producción. Cualquier sugerencia sobre qué buscar sería muy apreciada.
Plan de ejecución para la declaración de actualización cuando es lenta. es decir,
después de IndexOptimize
Plan de ejecución real (próximamente)
No he podido detectar una diferencia.
Planifique la misma consulta cuando sea rápida
Plan de ejecución real








