Я столкнулся с проблемой, которая, кажется, как-то связана с конфигурацией веб-сервера и приводит к тому, что запросы произвольно занимают много времени. Приложение создано с использованием старого простого Classic ASP и ADODB Connection.
Сценарий выглядит следующим образом:
- в начале обработки каждого HTTP-запроса в скрипте открывается одно соединение
- это соединение используется для выполнения запроса к SQL Server, который находится в отдельном блоке. conn.Execute используется. После этого соединение НЕ закрывается
- обычно от нескольких до нескольких десятков conn.Execute на одной странице ASP
Все работало хорошо до недавнего времени, когда некоторые из conn.Execute начали выполняться намного дольше, совершенно случайно.
- разница, например, 15 мс нормального времени выполнения против 2000 мс времени выполнения
- на стороне SQL Server, Profiler не показывает более длительное время выполнения запроса, поэтому должно быть что-то, блокирующее запрос conn.Execute
Когда надлежащая практика закрытия соединения после каждого conn.Execute была реализована, проблема исчезает. Однако, как я уже говорил, до недавнего времени все работало безупречно. Это веб-приложение довольно большое, и перезапись его для закрытия и повторного открытия соединений займет некоторое время. И мне нужно краткосрочное решение.
Я предполагаю, что это может иметь отношение к размеру пула соединений, однако это не ADO.NET, поэтому я не уверен, следует ли вообще учитывать проблему пула соединений. На стороне SQL Server нет ограничений на количество одновременных подключений к серверу.
Мне нужны некоторые подсказки. Мозговой штурм возможных идей.