我们在一个运行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会话是请求的生命周期。
有没有人有这样的经历,或者能指出我们正确的方向?
非常感谢
理查德
答案 0 :(得分:5)
您与SQL Server的连接不能超过32767。
@@CONNECTIONS也给(我的大胆)
返回自上次启动SQL Server以来成功或不成功的尝试连接数。
不是当前连接
我怀疑你的游泳池设置不正确,所以它已经太快了。
或者您没有正确释放连接,并且在回收IIS后正在检查SQL Server。