Problema de GridView + ObjectDataSource: rendimiento igualmente malo para conjuntos de resultados grandes y pequeños
-
03-07-2019 - |
Pregunta
Recientemente me llamaron para trabajar en una aplicación web heredada .NET más antigua. El rendimiento recientemente había caído bastante por debajo, ya que la cantidad de datos en el sistema se había cuadruplicado. Había estado bien durante los 2 años anteriores.
Estaba usando un archivo .xsd para hablar con un procedimiento almacenado que reducía los resultados lo suficiente (aunque sin paginación) y los alimentaba a un GridView a través de un ObjectDataSource.
La parte que no puedo entender es que me tomó unos 7 segundos cargar para obtener 1 resultado, 140 o 1200. Tomó una división segundo para 0 casos de resultados. (GridView está manejando la paginación)
Al usar el generador de perfiles SQL, pudimos ver que la consulta tardaba 6,9 segundos. Ejecutar la misma consulta con los mismos parámetros tomó 100 ms en SQL Management Studio. Cambié los parámetros para asegurarme de que no fuera solo un resultado en caché. El largo tiempo de espera es confiablemente reproducible.
Soy consciente de que implementando paginación tendría que hacerse aquí, pero por ahora solo estoy tratando retrospectivamente de encontrar una explicación detrás de por qué la página está funcionando igualmente mal para conjuntos pequeños y grandes ...
(La pantalla 'simple' de GridView está bien para sus necesidades, no es necesario controlar el HTML)
Solución
Tenemos el mismo problema:
- Compruebe si sus estadísticas están actualizadas:
SELECT ObjectName = Object_Name(ind.object_id), IndexName = ind.name, StatisticsDate = STATS_DATE(ind.object_id, ind.index_id) FROM SYS.INDEXES ind order by STATS_DATE(ind.object_id, ind.index_id) desc
- Suelte el caché del servidor SQL:
DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE
- Si ninguna de las dos ayuda, puede intentar aplicar el plan de consulta de SSMS con sugerencias como '' LOOP interno unirse '' y " con (index = ...) " ;.
Otros consejos
Podría intentar mirar el plan de ejecución y el tipo de parámetros que se envían desde su aplicación. Por ejemplo, si su aplicación está pasando un nvarchar para comparar con una columna varchar, podría causar problemas. http://weblogs.sqlteam.com/tarad/archive/ 2007/11/16 / 60408.aspx