Слишком много подключений к SQL 2005

У меня есть ситуация, когда приложение со временем открывает накопительные 6000 + подключений к 32-битному бэкэнду SQL2005 с пакетом обновления 2 (SP2) от нескольких серверов приложений, что в конечном итоге вызывает внутреннюю нагрузку на память (dll выгружается из сообщений области mem2leave в журнале и одновременно вылетает приложение). Я предполагаю, что приложение виновно (неправильно закрывает соединения). Я отбросил это назад парню из приложения, но он предполагает, что проблема может быть связана с SQL-сервером, поскольку это не происходит в аналогичной среде UAT. Любые предложения о том, что я могу сделать на стороне SQL? Я подумал об увеличении области mem2leave, но беспокоился, что это просто задержит / замаскирует реальную проблему.

3 ответа

Решение

Приложение.NET должно самоочищаться, когда сборщик мусора запускается на сервере приложений. Это должно автоматически выполняться каждые несколько минут.

Можете ли вы запросить SQL Server и увидеть, что эти соединения все еще открыты на SQL Server?

Если вы запустите netstat на сервере приложений, сможете ли вы увидеть все сокетные соединения открытыми? (Каждый spid, используемый на SQL Server, будет иметь сокет-соединение на сервере приложений.)

Если вы видите все используемые порты на сервере приложений, то сервер приложений определенно не закрывает соединения, так как SQL не закрывает соединения без запроса на это. Код.NET может ожидать, что это произойдет автоматически, и это не так. Вероятно, у вас нет проблемы в вашей тестовой среде, потому что использование намного ниже, и вы, вероятно, чаще выпускаете в тестовую среду, что приводит к закрытию всех портов при перезапуске IIS.

Это определенно звучит как проблема с кодом приложения для меня.

Вы закрываете свои соединения, когда заканчиваете их использовать, верно?

Также посмотрите на настройки вашего пула приложений. Когда он перезагружается, соединения будут разорваны.

Похоже, приложение не использует пул соединений. Это может вызвать такие проблемы, как то, что вы описали. Вы можете настроить некоторые параметры TCP/IP для ОС. Это описано в следующей статье базы знаний:

Описание настроек TCP/IP, которые вам, возможно, придется настроить, когда пул соединений с SQL Server отключен

Другие вопросы по тегам