Почему перенос нашего веб-сайта .NET / SQL Server на новый хост приводит к превышению размера пула соединений? - PullRequest
4 голосов
/ 21 июня 2010

Мы недавно перевели веб-сайт нашей компании на новый хост.Это сайт 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 раза.

  1. Как бы мы не столкнулись с этой проблемой, когда сайт находился на другом хосте почти 3 года?Есть ли возможность автоматически закрывать неиспользуемые соединения, которые я не реализовал на сервере SQL?
  2. Будет ли лучше всего переписывать каждое соединение и процедуру для явного открытия и закрытия базы данных соединений?

ОБНОВЛЕНИЕ Свойство maximum number of concurrent connections (Свойства сервера -> Вкладка Подключения) установлена ​​на 0.

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

ОБНОВЛЕНИЕ 2 Настройка пула приложений для перезагрузки после того, как 30 рабочих процессов остановили сайт, превышающий максимальное количество подключений, но теперьограничение некоторых (постоянных сеансов) функций - список недавно посещенных элементов сбрасывается очень быстро, и попытка что-либо изменить с помощью cms невозможна, поскольку вы вышли из системы, как только процессы перезапустятся ...

Ответы [ 3 ]

3 голосов
/ 22 июня 2010

Скорее всего, ваш код пропускает соединения повсюду.

Я бы поспорил, что на вашем старом хосте пул приложений настроен на частую перезагрузку из-за использования памяти или точки обработки # запросов.Скорее всего, на новом хосте используется цикличность по умолчанию.

Я рекомендую сначала настроить пул приложений на более частую перезапуск.Затем исправьте код.Либо путем рефакторинга DSLibrary (предполагаю, что она является доморощенной), либо путем простого изменения ее на использование предложений, где бы вы ни установили соединения с базой данных.

update
Еще одна вещь, измените вашусвойства сеанса для использования sql server в качестве резервного хранилища, чтобы вы не потеряли всю информацию о сеансе при перезапуске приложения.Это даст вам больше времени.

0 голосов
/ 22 июня 2010

Из того, что вы говорите, вы, кажется, не заключаете базу данных в оператор использования, поэтому вы каждый раз теряете соединение. Система создает дамп, когда получает доступ к нему, если вы явно не утилизируете его - что и является целью использования. Вы должны всегда использовать использование (или иным образом гарантировать, что dispose вызывается) для всего, что представляет ресурс вне вашей программы. Файлы, соединения с базой данных и т. Д.

0 голосов
/ 21 июня 2010

Вы проверили свойство maximum number of concurrent connections (Свойства сервера -> вкладка Подключения)?

...