Пул подключений ясное время ... Я не знаю, как это назвать :) - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть клиентское приложение, которое подключается к БД с помощью предложения using.

  using (SqlConnection sqlConn = new SqlConnection(ConnectionString))
  {
      sqlConn.Open();
      //SQLcommand codes
  }

Я знаю, что это обеспечит вызов sqlConnn.Close () и sqlConn.Dispose ().Однако для каждого клиента после выполнения этого кода я по-прежнему вижу некоторые SPID на SQLServer в спящем режиме, такие как:

60 0 sleep sa AVENGER 0 Xmark AWAITING COMMAND 0 61 0 sleep sa AVENGER 0 Xmark AWAITING COMMAND 062 0 sleep sa AVENGER 0 Xmark AWAITING COMMAND 0

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

Мой вопрос: есть ли параметр в C # или в SQLServer2008, который уменьшитна этот раз около 2 минут или около того?

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

Я искал в MSDN и наткнулся на ClearPool () , который позволит мне неявно удалить SPID из пула, но я думаю, что это пойдет не так, как пул соединений, и он не совсем чистый.

любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Как вы знаете сервер Sql может не закрыть соединение, даже когда вы вызываете sqlconn.Close (), и будет использовать то же соединение для любого другого клиента, подключающегося с той же строкой соединения.

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

Использование такого подхода позволит избежать проблем с пулами, и я виделэтот подход используется в хороших архитектурах приложений.

Вместо этого вам следует изменить свой код.

0 голосов
/ 28 февраля 2012

Вы ищете параметр «Idle Time-out». Он настроен для пула приложений в IIS. Ссылка на эту ссылку

...