SQL Server连接处理,连接池,生命周期和泄漏的连接

时间:2017-06-05 10:24:31

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

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

我正在使用连接池,但未在连接字符串中指定Connection Lifetime。这意味着如果我是对的,它将使用默认值0。值为零的连接生命周期意味着SQL服务器不应该关闭连接,对吗?

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

如何确定哪个连接因泄漏而打开,哪些连接因连接池而挂在那里?

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

1 个答案:

答案 0 :(得分:0)

连接生命周期值为零意味着SQL服务器不应该关闭连接,对吗?

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

我认为没有一种可靠/文档化的方法来识别数据库引擎中的池连接。