【问题标题】:SQL Server connection handling, connection pooling, lifetime and leaked connectionsSQL Server 连接处理、连接池、生存期和泄露的连接
【发布时间】:2017-06-05 10:24:31
【问题描述】:

我正在尝试识别我的应用程序中的 SQL 连接泄漏。经过一些操作后,当我的应用程序处于空闲状态(用户没有进行任何活动)时,我在sp_who2 返回的结果集中看到与我的数据库的 7 个连接。所有连接的状态为SleepingCommand 的值均为AWAITING COMMAND

我正在使用连接池,但连接字符串中未指定 Connection Lifetime。这意味着如果我是对的,它将使用默认值 0。 Connection Lifetime 的值为 0 意味着 SQL Server 永远不应该关闭连接,对吧?

我让我的应用程序空闲了一段时间(15-20 分钟),然后我看到sp_who2 没有显示与我的数据库的任何连接。我想知道为什么当 Connection Lifetime 为零时会得到这个结果。 SQL Server 是否会在一段时间后终止未使用的连接而不管连接生命周期值如何?

我如何识别哪个连接由于泄漏而打开,哪个连接由于连接池而挂在那里?

我的应用程序支持 SQL Server 2008、2014 和 2016。它是 ASP.NET 应用程序。

【问题讨论】:

    标签: sql-server ado.net database-connection connection-pooling connection-leaks


    【解决方案1】:

    Connection Lifetime 的值为 0 意味着 SQL 服务器永远不应该关闭连接,对吧?

    没有。用于清除池的规则没有很好地记录 AFAIK,但它们可以被池化程序关闭。请参阅https://msdn.microsoft.com/en-us/library/8xx3tyca%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    我认为没有可靠的/记录在案的方法可以从数据库引擎中识别池连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      相关资源
      最近更新 更多