Недавно наши разработчики увеличили размер пула во всех строках подключения до 8000. Они используют VS 2010 Framework 4.0. На стороне БД я отслеживаю, что открывается до 4000 соединений. Но проблема в том, что у нас есть множество журналов ошибок (см. Ниже), связанных с тайм-аутом рукопожатия.
Для меня это очень сложная проблема, и я не мог найти ни одной подсказки. Я знаю, что с сервером, который у меня есть (настоящий монстр), мы можем поддерживать больше открытых соединений. Я знаю, что у Макса 32767, но я никогда не рассчитываю достичь этого числа, но четыре килограмма - это намного меньше.
Строки подключения:
connectionString 1 ="server=S1;database=DB1;Integrated Security=false; user id=user; Password=password; Min Pool Size=10; Max Pool Size=8000; Connect Timeout=5;" providerName="System.Data.SqlClient"/>
.
.
.
connectionString 10 ="server=S1;database=DB10;Integrated Security=false; user id=user; Password=password; Min Pool Size=10; Max Pool Size=8000; Connect Timeout=5;" providerName="System.Data.SqlClient"/>
И журнал ошибок:
GXMT.Common.DataGateway.DAOException: выполненная команда: System.Data.SqlClient.SqlException: истекло время ожидания подключения. Период ожидания истек на этапе после входа в систему. Время ожидания соединения могло истечь во время ожидания сервера, чтобы завершить процесс входа в систему и ответить; Или время ожидания истекло при попытке создать несколько активных подключений. Время, потраченное на попытку подключения к этому серверу, было - инициализация [Pre-Login] = 1; рукопожатие = 3565; [Логин] инициализация = 0; аутентификация = 0; [После входа] завершено = 1001; ---> System.ComponentModel.Win32Exception: время ожидания операции истекло
Спасибо.
PS: Новое обнаружение - это когда количество подключений превышает 4000, даже в Sql Server Management Studio открытие подключения занимает около 25 секунд. !?
У вас есть разработчик, который не закрывает соединения и не вызывает рост пула соединений. Периодически перерабатывайте пул соединений или попробуйте использовать трассировку sql, чтобы определить, когда создаются новые соединения, чтобы вы могли определить и исправить код проблемы.