2010-09-26 19 views
5

Tengo problemas de rendimiento en mi aplicación asp.net. A veces el cliente tardaría entre 30 y 40 segundos en ejecutar un comando, mientras que en ocasiones tomaría de 3 a 4 segundos. Intenté el Analizador de SQL y no veo ningún problema. No pude replicar el problema por mi parte, en el mismo escenario cuando el cliente estaba intentando.ASP.NET Session Performance

Estoy pensando que podría tratarse de las variables de sesión que estoy usando. Estoy usando muchos de ellos para pasar información dentro de la página. Sin embargo, yo no los borro.

Si los borro, ¿me ayudaría? y si esto afectaría a otros usuarios. ¿O solo está claro para ese usuario?

Cualquier ayuda es apreciada.

+0

¿Podría proporcionarnos más información con respecto a la carga del servidor cuando esto sucede, incluido el uso de la CPU y el uso de la memoria? Por lo general, busco interbloqueos de recursos o tiempos de espera cuando las solicitudes comienzan repentinamente a tomar más de 30 segundos. – sisve

+2

Este tipo de preguntas son realmente difíciles de responder. ¿Cómo es el hardware? ¿Cuántos usuarios de servidores web? Exactamente la cantidad de datos en sesión (¿se puede cuantificar "muchos de ellos") por usuario? ¿Cuántos usuarios de SQL Server? Las diferencias en el rendimiento de plataformas/hardware/red y alrededor de un millón de otros factores (código incorrecto, arquitectura deficiente, hora del día, equilibrio de carga, almacenamiento en caché, etc., etc.) pueden afectar el rendimiento. ¿Cómo es el ambiente? –

+0

¿Qué modo de estado de sesión estás usando? es decir, inproc, sqlserver o stateserver? Los dos últimos usarán más recursos que los primeros, aunque también son más resistentes. –

Respuesta

0

La sesión y las variables de sesión son específicas del usuario, por lo que borrarlas no afectará a otros usuarios.

manteniendo su luz de sesión sin duda ayudará a mejorar el rendimiento.

0

Sugiera que la sesión de ASP.NET no afecte los tiempos de ida y vuelta de su servidor SQL durante el funcionamiento normal. Suponiendo que no se almacena nada en la sesión relacionada con su capa de datos (es decir, objetos estáticos SqlConnection)

Si está viendo esos tiempos largos (30-40 segundos), intente determinar si el rendimiento es una desaceleración gradual, o si su Los tiempos de ida y vuelta de SQL Server son esporádicos.

Considere implementar el registro para ayudar a determinar un patrón. Comience por escribir en el disco, un archivo por día/hora como considere apropiado.

  • hora de inicio del comando SQL begin. Registre la consulta/conjunto de datos/información relevante que está pasando.
  • hora de finalización del comando SQL.
 
--- Executing statement SELECT * FROM Customers 
--- Start 08:55.44 
--- End 08:55.45 
=== Roundtrip was 1 second SELECT * FROM Customers 

Después de una hora/día/semana, abra los registros en busca de "ida y vuelta", y tal vez escribir un programa para analizar estos registros para usted.

1

Hubo un problema de bloqueo de registros en uno de los procedimientos almacenados en la implementación .NET 2.0 del almacenamiento de sesión basado en SQL Server. Parece que MS incorporó la solución en el lanzamiento de .NET 4.0.

Echa un vistazo aquí: http://sanjevsharma.blogspot.com/2008/03/improving-aspnet-session-state-database.html

Estoy 99% seguro de que puede ejecutar la versión 4.0 de aspnet_regsql -ssadd y todavía ejecutar ASP.NET 2.0 en contra de ella. Recuerdo haber hecho un diff del script SQL 2.0 vs. 4.0 y la corrección anterior era la única diferencia real. La implementación de MS de la corrección fue un poco más agradable que (y está claramente basada en) el enlace anterior.

0

Si el problema no parece ser su base de datos, puede intentar crear un perfil de su aplicación web y ver dónde están los cuellos de botella. Es difícil reproducir problemas variables como los que se ven en producción (demoras de 4-40 segundos), pero los resultados de cuántas llamadas de método están ocurriendo y cuáles consumen la mayor cantidad de tiempo de ejecución pueden proporcionar una pista.

Algunos se mencionan en What Are Some Good .NET Profilers?

Personalmente soy un gran fan de la perfilador EQATEC.

0

Si tiene variabilidad en esa escala, podría estar viendo algún tipo de problema de bloqueo o contención. Según el tiempo, y qué más está sucediendo cuando su perfil, es posible que no vea un problema de bloqueo de SQL si eso es lo que es. Intente monitorear las métricas de bloqueo en perfmon para ver si hay algo sospechoso allí, y piense qué más en el sistema podría estar causando algún tipo de bloqueo o tiempo de espera de latencia.

0

¿Ha intentado habilitar el registro de rastreo de ASP.NET y ver los tiempos de carga en la pila de llamadas? He usado esto bastante para diagnosticar el cuello de botella en el rendimiento de ASP.NET. Si no está familiarizado con trace.axd, se puede activar a través de su archivo de configuración

<trace enabled="true" /> 

La activación de esta opción de configuración le permitirá navegar a Trace.axd en la raíz de su sitio y ver las últimas 10 transacciones en detalle. Puede habilitar un conjunto de resultados más grande, conjuntos de resultados móviles y un montón de otras opciones de rastreo ingeniosas a través de ese elemento de traza.