Nhibernate连接池问题

时间:2011-07-10 18:44:11

标签: c# sql-server nhibernate asp.net-mvc-3 database-connection

我们在一个运行SQL Express并处理多个基于AJAX并发请求的MVC3 Web应用程序上遇到了Nhibernate的连接池问题。

每隔一段时间(两小时之间)我们就会看到错误开始显示:

  

NHibernate.Util.ADOExceptionReporter
  超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。

然后加载

  

准备选择TOP(@ p0)时   ....
  发生错误

我们必须回收IIS应用程序池,以阻止在此之后抛出500个错误。

查看我们看到的SQL Server:

select * from sys.dm_exec_sessions

...提供大约30个会话,其ID高于51(即用户会话)

select * from sys.dm_exec_connections 

...提供大约相同的金额

BUT

select @@connections

...以79022

给出结果

这表明连接永远不会被释放吗?

Nhibernate会话是请求的生命周期。

有没有人有这样的经历,或者能指出我们正确的方向?

非常感谢

理查德

1 个答案:

答案 0 :(得分:5)

您与SQL Server的连接不能超过32767

@@CONNECTIONS也给(我的大胆)

  

返回自上次启动SQL Server以来成功或不成功的尝试连接数。

不是当前连接

我怀疑你的游泳池设置不正确,所以它已经太快了。

或者您没有正确释放连接,并且在回收IIS后正在检查SQL Server。