我们在使用SQL Express运行并处理多个并发的基于AJAX的请求的MVC3 Web应用程序上遇到与Nhibernate有关的连接池问题。Nhibernate连接池问题
每隔一段时间(小时之间),我们开始看到它的错误显示:
NHibernate.Util.ADOExceptionReporter
超时过期。在从池中获取连接之前已超时。发生这种情况的原因可能是因为所有连接池都在使用中,并且达到最大池大小。
然后在准备选择TOP(@ P0)
....
发生错误
我们必须回收IIS应用程序池的
负荷在此之后停止引发500个错误。
纵观SQL服务器,我们看到:
select * from sys.dm_exec_sessions
...给约30会话使用标识上面51(即用户会话)
select * from sys.dm_exec_connections
...给周围的相同数额
BUT
select @@connections
...给出结果79022
这是否表明连接永不释放?
Nhibernate会话是请求的整个生命周期。
有没有人有这样的经验或可以指出我们在正确的方向吗?
非常感谢
理查德
+1关于释放连接;检查为每个请求分配和释放会话的代码,并确保您正确地处理会话。 –
@理查德:谢谢你的接受。我会对你在调查中发现的内容感兴趣 – gbn
我发现我必须将连接池数从100增加到200,并且此后不再有这些错误。因为我相信该应用程序不应该需要这么多,但嘿,不是完全满意。有用。 – Richard