ASP.NETRequest Execution Time

Recientemente un cliente me solicito definir con claridad cual es tiempo que mide este contador y me parecio adecuado copiar la respuesta aqui:

ASP.NET\Request Execution Time

 La definicion en MSDN: Es el tiempo en milisegundos que tardó en ejecutar el ultimo request que llego a ASPNET. El tiempo de ejecucion comienza cuando el HttpContext de este request is creado, y se detiene antes de que la respuesta sea enviada a IIS (Servidor Web). Asumiendo que el codigo del usuario no llamo a HttpResponse.Flush, esto implica que el tiempo de ejecucion se detiene antes de enviar cualquier byte a IIS, o para que se entienda mejor al cliente, lo que quiere decir que el tiempo que tarda la respuesta en llegar al browser del cliente no se contabiliza en este contador.

La definicion en Permon: Es el tiempo en milisegundos que tardó en ejecutar el request mas reciente.

 

El umbral optimo: Esta basado en los requerimientos que el negocio necesite en cuanto a performance. Mientras mas bajo mejor por supuesto.

Explicacion:   

Veamos en un simple diagrama el flujo basico de un request y donde esta involucrado cada tiempo. 

 

 

 

                                   

  • ASP.NET\Request Execution Time: Este contador es solo tiempo 3 (T3)
  • El valor que da este contador en perfmon no es el de cada request sino el del ultimo request,  por eso es mejor enfocarse en el promedio de todos los request para darse una idea.
  • Si el promedio es de 60000 milisegundos (T3) por largos peridos = 60 segundos.. estamos en problemas, porque a esto se le suman T1,T2,T4 y T5 y simplemente quiere decir que sea lo que sea que se este procesando en el backend, esta procesamiento esta tardando mucho, excepciones validas de un largo procesamiento seria que en el Backend se este generando un reporte de gran tamaño o un proceso batch que amerite tardar 60 seg por cada request.

En general, es muy importante monitorear este valor para tener una idea del performance de nuestra aplicacion.