Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 增加最大池大小和性能_Sql_Asp.net_Sql Server_Connection Pooling - Fatal编程技术网

Sql 增加最大池大小和性能

Sql 增加最大池大小和性能,sql,asp.net,sql-server,connection-pooling,Sql,Asp.net,Sql Server,Connection Pooling,在我的ASP.net网站中,我与SQL Server Express数据库建立了连接。有时候我会犯很多错误,比如 System.InvalidOperationException:超时已过期。从池中获取连接之前经过的超时时间。发生这种情况的原因可能是所有池连接都在使用中,并且已达到最大池大小 搜索错误后,我发现可能是由于SQL Server连接未关闭。但是我已经正确地使用了SQL Server连接,并且已经正确地处理了它。我已经使用using语句来处理连接。在我的应用程序中,我在一天中的某个高峰

在我的ASP.net网站中,我与SQL Server Express数据库建立了连接。有时候我会犯很多错误,比如

System.InvalidOperationException:超时已过期。从池中获取连接之前经过的超时时间。发生这种情况的原因可能是所有池连接都在使用中,并且已达到最大池大小

搜索错误后,我发现可能是由于SQL Server连接未关闭。但是我已经正确地使用了SQL Server连接,并且已经正确地处理了它。我已经使用using语句来处理连接。在我的应用程序中,我在一天中的某个高峰时间收到很多请求(到SQL Server数据库的连接)

因此,我计划增加最大池大小。现在我还没有在连接字符串中指定它。因此它将是100(默认值)。我计划增加到20000,这样我就不会出错了

那么,将最大池大小增加到这个数字会导致任何问题吗?增加最大池是否会导致性能问题

编辑: 下面是我如何在代码中使用
的示例

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次以上的错误。所以我怀疑这是否真的是因为游泳池的大小?错误消息指出“发生这种情况的原因可能是所有池连接都在使用,并且达到了最大池大小”。那么,是否还有其他情况显示相同的错误消息?请帮助。

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

  • 更多的连接意味着更多的资源使用
  • SQL Server的连接限制约为30k个连接。当您耗尽它时,您将失去可用性
  • 我建议你慢慢往高处走。不要立即将池大小增加到20k。想想20k连接意味着什么:它意味着大约20k个线程(如果一个线程使用多个连接,则更少)同时执行。如果您处于该位置,则可能存在负载问题

    你为什么需要这么多的连接?对于web应用程序,通常每个正在运行的请求在同一时间只打开一个连接。在大多数情况下,几百个就足够了


    尽量缩短每个连接必须打开的持续时间。

    增加池大小只会缓解症状,而不是问题的核心。我怀疑您没有使用
    using
    -语句总是尽快关闭连接,是吗?此外,一般避免静态连接,尤其是在ASP.NET中。您的查询需要多长时间,也许您也应该对其进行优化。但是,SQL Server express似乎有一些限制(比如一个CPU)可能会导致此问题:您能否向我们展示一些如何打开和关闭DB连接的代码?我也有类似的问题,我发现很有帮助。@Dura是的,我正在使用“将连接用作新的SqlConnection”(connectionString)和“End Using”正确。我正在使用windows server 2008 r2操作系统。