Соединения с БД закрываются, что приводит к снижению производительности: MS SQL SERVER - PullRequest
0 голосов
/ 06 марта 2012

У меня есть два приложения, которые используют те же 2 базы данных. 1 приложение работает нормально, проблем с производительностью нет. Когда я запускаю запрос ниже, я получаю 1 соединение на базу данных. Они остаются открытыми некоторое время. Так что, как я просматриваю, кажется, что эти два соединения используются повторно. Через некоторое время они закрываются.

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

Я добавил это в строку подключения:

   Max Pool Size=75;Min Pool Size=5;

но количество соединений теперь увеличилось с 0 до 5, а затем снова уменьшилось до 0

Это приводит к тому, что приложение работает очень медленно, поскольку на некоторых страницах много запросов.

Буду признателен за любую помощь в решении этой проблемы.

Запрос:

SELECT
   DB_NAME(dbid) as DBName, 
   COUNT(dbid) as NumberOfConnections,
   loginame as LoginName
  FROM
   sys.sysprocesses
 WHERE 
   dbid > 0
GROUP BY 
   dbid, loginame   

Ответы [ 3 ]

0 голосов
/ 12 июня 2012

Да, я знаю.Проблема была с пулом приложений, я создал новый пул приложений, и он исправил это.Не уверен, в чем была проблема, хотя.- user1253073 только сейчас редактирую

0 голосов
/ 15 октября 2014

У меня та же проблема. У меня есть служба Windows .NET, написанная на C #, которая постоянно обновляет базу данных SQL Server 2008: около 100 тыс. Запросов в минуту.

Обычно число открытых соединений в пуле составляет максимум: 200. Каждую неделю, в течение примерно одного часа, соединения в пуле немедленно закрываются после каждой команды и открываются, когда требуется выполнить какую-то новую команду. Это значительно замедляет обслуживание.

Я пытался изменить минимальный и максимальный размер пула, и это ничего не меняет. Проблема не может быть легко воспроизведена: это происходит примерно раз в неделю. На данный момент мы не нашли способа выяснить, кто решает закрыть соединения: пул .NET или сервер SQL.

0 голосов
/ 28 марта 2012

@ User1253073 -> С точки зрения лучшей практики вы должны открывать и закрывать соединения в обоих приложениях только при необходимости .Что-то вроде: a) Откройте соединение, выполните запрос и загрузите результаты в DataSet, когда он отключен. B) Закройте соединение и выполните действия, чтобы манипулировать результатами DataSet.в) продолжить код.Такой подход позволил бы уменьшить количество активных соединений с базой данных без какой-либо причины и повысить производительность приложений.

...