Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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