У меня возникла разочаровывающая проблема, которую я изначально считал утечкой соединения, но это, похоже, не так. Secnario: доступ к данным для этого приложения использует корпоративные библиотеки (v4) от Microsoft. Все вызовы доступа к данным, завернутые в с помощью таких заявлений, какASP.NET SqlConnection Timeout issue
using (DbCommand dbCommand = db.GetStoredProcCommand("sproc"))
{
db.AddInParameter(dbCommand, "MaxReturn", DbType.Int32, MaxReturn);
...more code
}
Теперь индекс этого приложения составляет 8 звонков в базу данных, чтобы загрузить все, и я могу принести заявление на колени обновления индекса около 15 раз. Похоже, что когда база данных достигает 113 соединений, я получаю эту ошибку. Вот что делает это странным:
У меня есть аналогичный код с entlib на сайтах с высоким трафиком и НИКОГДА не возникало эта проблема.
Если я убью все подключения к базе данных и получить приложение производства обратно и работаю каждый раз я обновить приложение можно запустить этот SQL
SELECT DB_NAME(dbid) as 'Database Name',
COUNT(dbid) as 'Total Connections'
FROM sys.sysprocesses WITH (nolock)
WHERE dbid > 0
GROUP BY dbid
Я могу видеть количество соединений активно растет с каждым Обновление страницы. Выполнение того же кода в моем локальном поле с той же строкой соединения не вызывает этой проблемы. Кроме того, если веб-сайт для производства не работает, я могу запустить сайт через Visual Studio и выполнить его отлично, и единственное различие между ними состоит в том, что на производственном сайте включена проверка подлинности Windows, а у моей локальной копии нет. Выключение аутентификации Windows не влияет на сервер.
У меня нет абсолютно никакой информации о том, что вызывает это, или почему соединения не удаляются в SQL Server. Объекты EntLib не обрабатывают методы .Close() для чего-либо, поэтому я не могу четко закрыть объект.
Любые мысли? Спасибо!
Редактировать
Wow я только заметил, что я никогда не отправил сообщение об ошибке. Oy. Фактическая ошибка подключения: Истекло время ожидания. Период ожидания истекает до получения соединения из пула. Возможно, это произошло из-за того, что все объединенные соединения использовались и максимальный размер пула был достигнут.
Пожалуйста, поставьте некоторые из «более кода». –
Учитывая, что индекс делает 8 вызовов хранимых procs/SELECT и т. Д., Сколько времени тратится в базе данных по каждому из этих запросов? Может быть, страница занимает довольно много времени, чтобы получить данные из БД и если запрашивается одна и та же страница, она приводит к новому соединению (или из пула) и выполнению длинных запросов? – shahkalpesh
Дополнительный код не имеет особого значения, поскольку он либо выполняет считыватель внутри использования, либо выдает скаляр. Ванильный материал действительно. – dparsons