C#:已达到最大池大小的根本原因

  • 本文关键字: c# sqlconnection
  • 更新时间 :
  • 英文 :


我们在WCF application中遇到以下错误。

超时已过期。 在获取 从池连接。 这可能是因为所有池化 连接正在使用中,已达到最大池大小。

当我们收到错误时,应用程序总共消耗了 24 个连接,我认为 100 是默认连接池大小。

我们总是关闭SQL connection,也处理SQLDataReader

我不确定为什么会发生这种处决。当我们收到此错误时,还有其他情况吗?

我有一些建议。

  1. 正确实现using块内的所有连接以关闭/处置连接(如您所说,这已经完成(
  2. 检查哪些用户/计算机保持打开的连接。运行此查询以标识数据库 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

这可以给你一些提示,说明谁打开了太多的连接。

  1. 在连接字符串中实现池化以限制连接。在应用程序连接字符串中使用以下内容:

Pooling=true; Min Pool Size=1; Max Pool Size=5

我希望这能帮助你。

相关内容

  • 没有找到相关文章

最新更新