(Извините, если это действительно длинный вопрос, он называется конкретным)
Компания, в которой я работаю, имеет несколько сайтов, которые работают в течение некоторого времени без проблем. Приложения представляют собой смесь ASP.NET 2.0, 3.5 и 4.0, все из которых используют ADO.NET для подключения к стандартному экземпляру SQL Server (на том же веб-сервере), все они размещены на IIS7.
Проблема началась, когда мы перешли на обновленный веб-сервер. Мы приложили все усилия, чтобы настроить сервер, экземпляр БД и IIS с точно такими же настройками (за исключением имени другого компьютера и того факта, что мы обновили SQLExpress до Standard), и, насколько мы могли судить, мы сделали , Оба сервера работают под управлением Windows Server 2008 R2 (применены все текущие обновления) и получили установку по умолчанию.
Проблема очень очевидна при запуске одного из этих приложений. Когда вы попадаете на страницу входа в наше приложение, сама страница загружается очень быстро. Это верно даже в том случае, если вы загружаете страницу с нового компьютера, который не может кэшировать страницу с отключенным кэшированием IIS. Проблема на самом деле видна, когда вы вводите данные для входа и нажимаете кнопку входа. Из-за (не очень хорошего) дизайна наших баз данных процесс входа в систему должен иметь доступ к нескольким базам данных, теоретически до 150 отдельных БД, но на практике обычно 2. Проблема возникает, даже когда открыты только 2 базы данных (минимум). Не очень хороший дизайн, но мы должны жить с ним сейчас.
При попытке первоначально открыть соединение с базой данных весь процесс останавливается примерно на 20 секунд каждый раз, независимо от того, подключаетесь ли вы к 2 дБ или к 40. Я запустил профилировщик .NET (точечная трассировка jetbrains) против процесса, и единственная информация, которую я мог извлечь из этого, была то, что один или все вызовы sqlconnection.open () составляли 90% времени. Это происходит только при первом использовании приложения, но проблема усугубляется тем фактом, что IIS, похоже, игнорирует параметры переустановки, которые мы для него установили, и перезапускает приложение после нескольких минут простоя, вызывая проблему снова ,
Я также пытался использовать профилировщик SQL Server, чтобы увидеть, какие операции с базами данных стали причиной замедления, но из-за всей другой активности БД (и того факта, что мне пришлось делать это на нашем производственном сервере, потому что проблема не возникает в наших тестовых средах) Я не мог определить точную операцию, которая вызывала остановку. Я постараюсь прийти поздно вечером и закрыть производственные сайты, чтобы запустить SQL Profiler, но я не смогу сделать это сразу.
В ходе исследования проблемы я попробовал пару решений
Думая, что это может быть проблема с разрешением имен, я попытался изменить оба файла hosts на веб-сервере, а также присвоить строкам соединения IP-адрес вместо имени сервера для разрешения, без разницы. Я слышал о протоколе LLMNR, вызывающем подобные проблемы, но я думаю, что попытка соединения по IP или разрешение с помощью файла hosts должна была устранить эту возможность, хотя, признаюсь, я никогда не пытался отключить LLMNR.
Я увеличил время простоя, интервалы перезапуска и т. Д. В IIS, но это даже не соблюдается, а тем более решает проблему. Это заставляет меня поверить, что на машине есть настройка, переопределяющая настройки приложения IIS.
несколько других исправлений кода, ни одно из которых не имело никакого значения. Причиной проблемы является настройка SqlServer?
другие вещи, которые я уже забыл.
Буду очень признателен за любые идеи, опыт или что-то еще, чтобы помочь мне решить эту проблему!