我们在运行使用SQL Express的MVC3 Web应用程序时,使用Nhibernate处理多个并发的基于AJAX的请求时,遇到了一些连接池问题。
偶尔会出现错误,显示:
NHibernate.Util.ADOExceptionReporter
超时已过期。在从池中获取连接之前已经超过了超时时间。这可能是因为所有池化连接都正在使用且已达到最大池大小。
然后会出现一系列的:
准备选择select TOP (@p0)
....
出现错误
此后我们必须重新启动IIS应用程序池,以防止抛出500错误。
查看SQL Server,我们发现:
select * from sys.dm_exec_sessions
...给出了超过51的ID(即用户会话)大约30个会话。
select * from sys.dm_exec_connections
...大致提供相同的数量
但是
select @@connections
...给出了79022个结果。
这是否意味着连接从未被释放?
Nhibernate会话的生命周期为请求期间。
是否有任何人有类似的经验,或者可以指引我们正确的方向?
非常感谢。
Richard