Problema de GridView + ObjectDataSource: rendimiento igualmente malo para conjuntos de resultados grandes y pequeños

StackOverflow https://stackoverflow.com/questions/818091

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)

¿Fue útil?

Solución

Tenemos el mismo problema:

  1. 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
  1. Suelte el caché del servidor SQL:
    DBCC DROPCLEANBUFFERS
    DBCC FREEPROCCACHE
  1. 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top