繁体   English   中英

池中的所有连接都在使用中

[英]All connections in pool are in use

我们目前手上有一点情况 - 似乎有人忘了在代码中关闭连接。 结果是连接池相对快速耗尽。 作为临时补丁,我们添加了Max Pool Size = 500; 到我们在Web服务上的连接字符串,并在所有连接都用完之后回收池,直到我们弄明白这一点。

到目前为止,我们已经做到了:

SELECT SPId
FROM MASTER..SysProcesses
WHERE DBId = DB_ID('MyDb')  and last_batch < DATEADD(MINUTE, -15, GETDATE())

获得15分钟未使用的SPID。 我们现在尝试使用该SPID获取上次执行的查询:

DBCC INPUTBUFFER(61)

但显示的查询是多种多样的,这意味着关于连接操作的基础级别的某些内容被破坏,或者我们的推断是错误的......

我们的想法在这里有误吗? DBCC / sysprocesses是否给出了我们期望的结果,或者是否存在一些副作用? (例如,池中的连接影响?)

(请注意我们可以使用SQL找到的东西,因为执行代码的人很多而且现在不在场)

我希望inputbuffer能够记住大量不同的查询 - 根据失败的时间和运行的各种查询,您似乎不太可能以这种方式查看一致的查询。 回想一下,最终将关闭连接,但只有当它们进行GC并最终确定时才会关闭。

正如Mitch建议的那样,您需要搜索连接打开源并确保它们已本地化并包含在using()中。 还要查找可能持有连接的可能长寿的对象。 在我们的目录的早期版本中,ASP页面对象保存了未正确管理的连接。

要缩小范围,您可以在关注应用程序的特定部分时监控连接数(perfmon)吗? 在CRUD领域与报告或其他查询相比,它会发生更多吗? 这可能有助于缩小您需要做的源头冲刷。

您是否能够更改连接字符串以包含有关在“应用程序”字段中创建连接的位置和原因的信息?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM