(Disculpe si esta es una pregunta muy larga, dijo que es específica)ASP.NET 2.0-4.0 Aplicaciones web que experimentan una puesta en marcha inicial extremadamente lenta.
La empresa para la que trabajo tiene una serie de sitios, que han estado funcionando durante algún tiempo sin problemas. Las aplicaciones son una mezcla de ASP.NET 2.0, 3.5 y 4.0, todas usan ADO.NET para conectarse a una instancia de SQL Server Standard (en el mismo servidor web), todas alojadas con IIS7.
El problema comenzó cuando nos cambiamos a un servidor web actualizado. Hicimos todo lo posible para configurar el servidor, db instance e IIS con la misma configuración exacta (excepto por el nombre de la máquina diferente, y el hecho de que habíamos actualizado de SQLExpress a Standard), y por lo que pudimos ver, lo hicimos . Ambos servidores ejecutan Windows Server 2008 R2 (se aplicaron todas las actualizaciones actuales) y recibieron una instalación predeterminada.
El problema es muy evidente al iniciar una de estas aplicaciones. Cuando llegue a la página de inicio de sesión de nuestra aplicación, la página en sí misma se carga extremadamente rápido. Esto es cierto incluso cuando carga la página desde una máquina nueva que no podría tener la página en caché, con el almacenamiento en caché de IIS deshabilitado. El problema es realmente visible cuando ingresa su información de inicio de sesión y hace clic en el botón de inicio de sesión. Debido al diseño (no excelente) de nuestras bases de datos, el proceso de inicio de sesión debe acceder a una serie de bases de datos, teóricamente hasta 150 DB separadas, pero en la práctica generalmente 2. El problema ocurre incluso cuando solo se abren 2 bases de datos (el mínimo). No es un gran diseño, pero tenemos que vivir con eso por ahora.
Al tratar de abrir inicialmente una conexión a la base de datos, todo el proceso se detiene durante unos 20 segundos cada vez, independientemente de si se está conectando a 2 dbs o 40. He ejecutado un .NET profiler (jetbrains dottrace) contra el proceso, y la única información que podía tomar de él era que una o todas las llamadas a sqlconnection.open() representaban el 90% del tiempo. Esto solo ocurre con el primer uso de la aplicación, pero el problema se agrava por el hecho de que IIS parece ignorar las configuraciones de reciclaje que le hemos asignado, y recicla la aplicación después de unos minutos de inactividad, causando que el problema vuelva a ocurrir .
También traté de usar el perfilador de SQL Server para ver qué operaciones de la base de datos causaron la desaceleración, pero debido a todas las otras actividades de la base de datos (y el hecho de que tuve que hacerlo en nuestro servidor de producción, el problema no ocurre en nuestros entornos de prueba) No pude precisar la operación exacta que estaba causando la interrupción. Trataré de llegar tarde a la noche y de cerrar los sitios de producción para ejecutar el generador de perfiles SQL, pero es posible que no pueda hacerlo de inmediato.
En el curso de la investigación del problema, he intentado un par de soluciones
Pensando que podría ser un problema de resolución de nombres, he intentado modifiying tanto el archivo hosts en el servidor web, así como dar las connectionStrings una dirección IP en lugar del nombre del servidor para resolver, sin diferencias. He oído que el protocolo LLMNR causa problemas como este, pero creo que tratar de conectarme por IP o resolver con el archivo hosts debería haber eliminado esa posibilidad, aunque admito que nunca intenté desconectar LLMNR.
He aumentado los tiempos de espera inactivos, los intervalos de reciclaje, etc. en IIS, pero esto ni siquiera parece respetarse, y mucho menos resolver el problema. Esto me lleva a creer que hay una configuración que anula la configuración de la aplicación IIS en la máquina.
muchas otras correcciones de código, ninguna de las cuales marcó la diferencia. ¿La configuración de SqlServer está causando el problema?
otras cosas que olvidé por ahora.
¡Cualquier idea, experiencia o lo que sea será muy apreciada para ayudarme a resolver este problema!
¿Has intentado conectarte a tus antiguos SQLExpress DBs solo para ver si había una diferencia de velocidad? ¿Qué hay de conectar solo a 1 db como prueba (cosas simples de SQL)? – webdad3
Desafortunadamente no tenemos la opción de conectarnos a la instancia anterior. Una vez que tenemos el nuevo servidor funcionando, el viejo servidor se formateó y reutilizó para otra cosa.Incluso si la instancia aún existiera, la implementación física de nuestro sistema no me permitiría conectarme al servidor anterior sin tener que pasar por los servidores de seguridad en ambos extremos y todo eso. – Caleb