我们在WCF application
中遇到以下错误。
超时已过期。 在获取 从池连接。 这可能是因为所有池化 连接正在使用中,已达到最大池大小。
当我们收到错误时,应用程序总共消耗了 24 个连接,我认为 100 是默认连接池大小。
我们总是关闭SQL connection
,也处理SQLDataReader
。
我不确定为什么会发生这种处决。当我们收到此错误时,还有其他情况吗?
我有一些建议。
- 正确实现
using
块内的所有连接以关闭/处置连接(如您所说,这已经完成( - 检查哪些用户/计算机保持打开的连接。运行此查询以标识数据库 ID:
select distinct dbid, DB_NAME(dbid) FROM sys.sysprocesses where dbid > 0
然后,使用此查询检查所有打开的连接,替换 dbid:
SELECT dbid, DB_NAME(dbid) as DatabaseName, COUNT(dbid) as ConnectionCount, loginame as LoginName
FROM sys.sysprocesses
WHERE dbid = 1
GROUP BY dbid, loginame
ORDER BY count(dbid) desc
这可以给你一些提示,说明谁打开了太多的连接。
- 在连接字符串中实现池化以限制连接。在应用程序连接字符串中使用以下内容:
Pooling=true; Min Pool Size=1; Max Pool Size=5
我希望这能帮助你。