Мы недавно перевели веб-сайт нашей компании на новый хост.Это сайт ASP.NET с кодом C #, который подключается к серверу MS SQL.
Поскольку сайт перемещен на новый сервер, он превышает предел пула соединений (который не установлен явно, поэтому яверить по умолчанию размер 100).Проверка открытых процессов с помощью SQL Server Management Studiore показала, что каждый вызов базы данных оставался открытым, и действительно, в коде я не могу найти явно закрытых соединений вообще.
Соединения с базой данных выполняются следующим образомway:
DSLibrary.DataProviders.SqlProvider db = new DSLibrary.DataProviders.SqlProvider(Defaults.ConnStr);
Существует небольшая документация об этой DSLibrary, и я предполагаю, что это библиотека, написанная первоначальным разработчиком сайта.Ни один из членов класса DSLibrary явно не закрывает соединения - и при этом они не определены в блоке using
для автоматического закрытия соединения.
У меня вопрос в 2 раза.
- Как бы мы не столкнулись с этой проблемой, когда сайт находился на другом хосте почти 3 года?Есть ли возможность автоматически закрывать неиспользуемые соединения, которые я не реализовал на сервере SQL?
- Будет ли лучше всего переписывать каждое соединение и процедуру для явного открытия и закрытия базы данных соединений?
ОБНОВЛЕНИЕ Свойство maximum number of concurrent connections
(Свойства сервера -> Вкладка Подключения) установлена на 0.
Если я запускаю веб-сайт в режиме отладки на моей машине для разработки, подключаясь удаленно к производственной базе данных, тогда соединения, похоже, закрываются правильно.Кажется, это говорит о том, что это как-то связано с настройкой IIS?
ОБНОВЛЕНИЕ 2 Настройка пула приложений для перезагрузки после того, как 30 рабочих процессов остановили сайт, превышающий максимальное количество подключений, но теперьограничение некоторых (постоянных сеансов) функций - список недавно посещенных элементов сбрасывается очень быстро, и попытка что-либо изменить с помощью cms невозможна, поскольку вы вышли из системы, как только процессы перезапустятся ...