Tengo un procedimiento almacenado que se agota cada vez que se llama desde la aplicación web.
Encendí el Sql Profiler y rastreé las llamadas que se agotaron y finalmente descubrí estas cosas:
- Cuando se ejecutan las declaraciones desde dentro de MS SQL Management Studio, con los mismos argumentos (de hecho, copié la llamada al procedimiento desde el rastreo del perfil sql y la ejecuté): finaliza en un promedio de 5 ~ 6 segundos.
- Pero cuando se llama desde la aplicación web, tarda más de 30 segundos (en seguimiento), por lo que mi página web se agota para entonces.
Aparte del hecho de que mi aplicación web tiene su propio usuario, todo es igual (misma base de datos, conexión, servidor, etc.) También intenté ejecutar la consulta directamente en el estudio con el usuario de la aplicación web y no se necesitan más de 6 segundo.
¿Cómo averiguo lo que está pasando?
Supongo que no tiene nada que ver con el hecho de que usamos BLL> capas DAL o adaptadores de tabla, ya que el rastro muestra claramente que el retraso está en el procedimiento real. Eso es todo lo que puedo pensar.
EDITAR Descubrí en este enlace que ADO.NET se establece ARITHABORT
en verdadero, lo cual es bueno la mayor parte del tiempo, pero en algún momento esto sucede, y la solución with recompile
alternativa sugerida es agregar una opción al proceso almacenado. En mi caso, no funciona, pero sospecho que es algo muy similar a esto. ¿Alguien sabe qué más hace ADO.NET o dónde puedo encontrar la especificación?