首页 文章

增加最大池大小和性能

提问于
浏览
2

在我的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

EDIT: 我刚刚通过在我的应用程序中将最大池大小设置为20000进行测试,以检查最大池是否真的导致问题 . 我原本期望不再得到此异常 . 但它没有解决问题,也可能不是错误的原因 . 设置最大池后,我在3小时的持续时间内得到上述错误约50次 . 所以我怀疑它真的是由于游泳池大小?错误消息指出"This may have occurred because all pooled connections were in use and max pool size was reached" . 那么是否有其他情况显示相同的错误消息?请帮忙 .

1 回答

  • 2

    如果需要,可以增加池大小 . 有两个缺点:

    • 更多连接意味着更多的资源使用 .

    • SQL Server的连接限制大约为30k连接 . 当你耗尽它时,你将失去可用性 .

    我建议走得更慢 . 不要立即将池大小增加到20k . 想想20k连接意味着什么:它意味着同时执行大约20k个线程(如果单个线程使用多个连接,则更少) . 如果你在那个地方,你可能有负载问题 .

    为什么你甚至需要那么多连接?对于Web应用程序,每个运行请求通常只有一个连接同时打开 . 对于大多数情况,几百应该足够了 .

    尝试缩短每个连接必须打开的持续时间 .

相关问题