在我的ASP.net网站上,我连接到SQL Server Express数据库。有时我会遇到很多错误,比如
System.InvalidOperationException:超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。
在搜索错误后,我发现可能是由于未关闭的SQL Server连接。但我已经正确使用了SQL Server连接,并且我已正确处理它。我使用using语句来处理连接。在我的应用程序中,我在一天的某个高峰时间收到很多请求(连接到SQL Server数据库)。
所以我计划增加最大池大小。现在我没有在我的连接字符串中指定它。所以它将是100(默认)。我计划将它增加到20000,这样我就不会得到错误。
增加到这个数字的最大池大小会导致任何问题吗?增加最大池会导致任何性能问题吗?
编辑: 以下是我在代码
中使用Using
的示例
Using con1 As New SqlConnection
con1.ConnectionString = "" //conn string here
con1.Open()
doSomething()
End Using
Using con2 As New SqlConnection
con2.ConnectionString = "" //conn string here
con2.Open()
doSomething()
Using con3 As New SqlConnection
con3.ConnectionString = "" //conn string here
con3.Open()
doSomething()
End Using
End Using
Catch ex As Exception
End Try
修改 我刚刚通过在我的应用程序中将最大池大小设置为20000进行测试,以检查最大池是否确实导致了问题。我希望不再得到此异常。但它没有解决问题,也可能不是错误的原因。设置最大池后,我在3小时的持续时间内得到上述错误约50次。所以我怀疑它真的是由于游泳池大小?错误消息指出“可能已发生这种情况,因为所有池化连接都在使用中并且达到了最大池大小”。那么是否有其他情况显示相同的错误消息?请帮忙。
答案 0 :(得分:2)
如果需要,可以增加池大小。有两个缺点:
我建议更慢地走高。不要立即将池大小增加到20k。想想20k连接意味着什么:它意味着同时执行大约20k个线程(如果单个线程使用多个连接,则更少)。如果你在那个地方,你可能有负载问题。
为什么你甚至需要那么多连接?对于Web应用程序,每个运行请求通常只有一个连接同时打开。对于大多数情况来说,几百个应该足够了。
尝试缩短每个连接必须打开的持续时间。