Как очистить соединения в Sql Server 2005 - PullRequest
3 голосов
/ 17 сентября 2008

На моем рабочем месте работают продавцы, использующие стороннее настольное приложение, которое напрямую подключается к серверу Sql, и программное обеспечение оставляет сотни спящих соединений для каждого пользователя. Есть ли способ очистить это соединение программно?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2008

Какую версию SQL Server вы используете? Вы можете написать хранимую процедуру для этого, просматривая данные из sp_who и затем делая некоторые предположения о последнем действии. Есть столбец «LastBatch», в котором последний раз что-то было отправлено этим пользователем. Я бы сказал, что если это более часа (или любой другой интервал), выполните KILL для этого SPID.

Вы можете сделать это в SQL 2005 следующим образом:

declare @spid int
   , @cmd varchar(200)
declare Mycurs cursor for
select spid
 from master..sysprocesses
 where status = 'sleeping'
 and last_batch > dateadd( s, -1, getdate())
open mycurs
fetch next from mycurs into @spid
while @@fetch_status = 0
 begin
  select @cmd = 'kill ' + cast(@spid as varchar)
  exec(@cmd )
  fetch next from mycurs into @spid
 end
deallocate MyCurs
1 голос
/ 01 мая 2009

Но вместо того, чтобы убивать эти процессы вручную, не должен ли быть способ избежать этого? У меня такая же проблема в проекте

В нашем веб-приложении мы выполняем некоторые обновления с использованием веб-службы (т. Е. Программа вызывает метод веб-службы. Метод открывает соединение, выполняет обновление, фиксирует и закрывает соединение с помощью connection.close ())

В студии sqlserver mgmt, если я выполняю процедуру sp_who2, я вижу, что соединения увеличиваются по мере запуска приложения - фактически со скоростью 1 соединение на выполнение обновления. И важная часть заключается в том, что она пересекает 100, а затем не позволяет больше подключений в БД. Пользователи не могут войти в систему, так как программы не работают, поскольку они не могут получить больше новых соединений.

Как обеспечить повторное использование соединений - Мы не написали код пула соединений, используя пулы соединений по умолчанию asp.net и Sqlserver. Почему соединения не используются повторно и почему они не исчезают после "Закрытия"? Зависит ли это от того, что веб-сервис обрабатывает транзакцию?

Большое спасибо

...