代码之家  ›  专栏  ›  技术社区  ›  Chris Canal

如何在sql server 2005中清除连接

  •  3
  • Chris Canal  · 技术社区  · 16 年前

    我的工作场所有销售人员使用第三方桌面应用程序直接连接SQL服务器,该软件为每个用户留下数百个休眠连接。是否仍有以编程方式清除这些连接的方法?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Kyeotic    12 年前

    您运行哪个版本的SQL Server?您可以编写一个存储过程来执行此操作,查看SPX的数据,然后对最后一个活动进行猜测。有一个“LaStApple”列最后一次提交这个用户的东西。我想说如果超过一个小时(或任何间隔),对那个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
    
        2
  •  1
  •   Anand    15 年前

    但是,不是手工杀死这些过程,难道不应该有办法避免这些吗?我在一个项目中遇到了同样的问题。

    在我们的web应用程序中,我们使用web服务(即程序调用web service方法)执行一些更新。方法使用connection.close()打开连接、执行更新、提交并关闭连接)

    在sqlserver mgmt studio中,如果我执行sp_who2,我会看到连接随着应用程序的运行而增加——事实上,每次更新执行一个连接。相关的部分是它穿过100,然后不允许更多的连接到数据库中。用户无法登录以及程序失败,因为他们无法获得任何新的连接。

    如何确保连接被重用——我们没有使用默认的ASP.NET和SQLServer连接池来编写任何连接池代码。为什么这些连接不能被重用,为什么它们在“关闭”之后不会消失? 这是否取决于webservice正在处理事务?

    谢谢