如何清除Sql Server 2005中的连接

时间:2020-03-05 18:58:27  来源:igfitidea点击:

我的工作场所有销售人员使用直接连接Sql Server的第三方桌面应用程序,该软件为每个用户留下了数百个睡眠连接。无论如何,以编程方式清除这些连接?

解决方案

回答

我们运行哪个版本的SQL Server?我们可以编写一个存储过程来执行此操作,查看来自sp_who的数据,然后对上一个活动进行一些猜测。该用户上次提交内容时有一个" LastBatch"列。我要说的是,如果已超过一个小时(或者任何间隔),请对该SPID执行KILL。

我们可以在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

回答

但是,不是应该手动杀死这些进程,难道没有办法避免这些吗?我在一个项目中有同样的问题

在我们的Web应用程序中,我们正在使用Web服务执行一些更新(即程序调用了Webservice方法。该方法使用connection.close()打开连接,进行更新,提交和关闭连接)

在sqlserver mgmt studio中,如果我执行sp_who2,则看到连接增加,因为应用程序实际上以每次更新执行1个连接的速率运行。和有关的部分是它越过100,然后不允许更多的连接到db。用户无法登录以及程序失败,因为他们无法再获得任何新的连接。

如何确保连接被重用我们没有使用默认的asp.net和Sqlserver连接池编写任何连接池代码。为什么不重用连接,为什么在"关闭"后它们不消失?
这是否取决于Web服务正在处理事务的事实?

非常感谢