如何清除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服务正在处理事务的事实?
非常感谢