我正在尝试在我的应用程序中识别SQL连接泄漏。在一些操作之后,当我的应用程序空闲时(用户没有做任何活动),我在sp_who2
返回的结果集中看到了与我的数据库的7个连接。所有连接的状态为Sleeping
,Command
所有连接的状态均为AWAITING COMMAND
。
我正在使用连接池,但未在连接字符串中指定Connection Lifetime
。这意味着如果我是对的,它将使用默认值0。值为零的连接生命周期意味着SQL服务器不应该关闭连接,对吗?
我让我的应用程序闲置一段时间(15-20分钟)然后我看到sp_who2
没有显示与我的数据库的任何连接。我想知道为什么当Connection Lifetime为零时我得到这个结果。 SQL Server是否会在一段时间后终止未使用的连接,而不管Connection Lifetime值是什么?
如何确定哪个连接因泄漏而打开,哪些连接因连接池而挂在那里?
我的应用程序支持SQL Server 2008,2014和2016.它是ASP.NEt应用程序。
答案 0 :(得分:0)
连接生命周期值为零意味着SQL服务器不应该关闭连接,对吗?
没有。用于清除池的规则没有很好地记录在AFAIK中,但是它们可以被合并器关闭。请参阅https://msdn.microsoft.com/en-us/library/8xx3tyca%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396。
我认为没有一种可靠/文档化的方法来识别数据库引擎中的池连接。