如何解决最大连接池错误

本文关键字:连接 错误 何解决 解决 | 更新日期: 2023-09-27 18:07:50

我有一个应用程序在asp.net 3.5和数据库是Sql server 2005。

"Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached."

出现了这个错误,如何解决这个错误

我尝试SqlConnection.ClearAllPools();,但这也不起作用。

SqlCommand cmdToExecute = new SqlCommand();
            cmdToExecute.CommandText = "dbo.[sp_user_listing]";
            cmdToExecute.CommandType = CommandType.StoredProcedure;
            DataTable toReturn = new DataTable("courier_user_listing");
            SqlDataAdapter adapter = new SqlDataAdapter(cmdToExecute);
            // Use base class' connection object
            cmdToExecute.Connection = sqMainConnection;
            try
            {
                cmdToExecute.Parameters.Add(new SqlParameter("@suser_name", SqlDbType.VarChar, 250, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _user_name));

                if (blnMainConnectionIsCreatedLocal)
                {
                    // Open connection.
                    sqMainConnection.Open();
                }
                else
                {
                    if (CPMainConnectionProvider.IsTransactionPending)
                    {
                        cmdToExecute.Transaction = CPMainConnectionProvider.CurrentTransaction;
                    }
                }
                // Execute query.
                adapter.Fill(toReturn);
                i32ErrorCode = (Int32)cmdToExecute.Parameters["@iErrorCode"].Value;
                if (i32ErrorCode != (int)LLBLError.AllOk)
                {
                    // Throw error.
                    throw new Exception("Stored Procedure 'sp_courier_user_SelectAll' reported the ErrorCode: " + i32ErrorCode);
                }
                return toReturn;
            }
            catch (Exception ex)
            {
                // some error occured. Bubble it to caller and encapsulate Exception object
                throw new Exception("Courier_user::SelectAll::Error occured.", ex);
            }
            finally
            {
                if (blnMainConnectionIsCreatedLocal)
                {
                    // Close connection.
                    sqMainConnection.Close();
                }
                cmdToExecute.Dispose();
                adapter.Dispose();
            }

如何解决最大连接池错误

检查数据库中是否有长时间运行的查询

增加你的池大小只会让你的web应用程序活得更长(可能会变得更慢)

您可以使用sql server profiler和filter对持续时间/读取来查看哪些查询需要优化。

我还看到你可能保持全球联系?

blnMainConnectionIsCreatedLocal

让。net为你做池,并使用using语句打开/关闭你的连接。

建议:

  1. 总是打开和关闭这样的连接,所以。net可以管理你的连接,你不会耗尽连接:

        using (SqlConnection conn = new SqlConnection(connectionString))
        {
         conn.Open();
         // do some stuff
        } //conn disposed
    
  2. 正如我提到的,用sql server profiler检查你的查询,看看你是否可以优化它。在web应用程序中,如果查询速度慢,请求多,也会导致这些超时。

你也可以试试....

运行应用程序....当它还在运行时,启动命令提示符

在应用程序运行时在命令提示符上键入netstat -n。您应该看到一个TCP/IP连接列表。检查一下你的清单是否很长。理想情况下,列表中的连接应该少于5个。检查连接状态。
如果TIME_WAIT状态的连接太多,则表示该连接已关闭,正在等待操作系统释放资源。如果您在Windows上运行,默认的临时端口范围在1024到5000之间,Windows从TIME_WAIT状态释放资源的默认时间为4分钟。因此,如果您的应用程序在不到4分钟的时间内使用了超过3976个连接,您将得到您所得到的异常。

修复建议:

  1. 添加一个连接池到您的连接字符串

如果您继续收到相同的错误信息(这是极不可能的),您可以尝试以下操作:(如果您不熟悉Windows注册表,请不要这样做)

  1. 从运行命令中运行regedit。在注册表编辑器中查找此注册表项:HKEY_LOCAL_MACHINE'SYSTEM'CurrentControlSet'Services'Tcpip'Parameters:

修改设置,使其为:

MaxUserPort = dword:00004e20(10000十进制)TcpTimedWaitDelay = dword:0000001e (30 decimal)

这将增加端口数量到10,000,并减少释放空闲tcp/ip连接的时间。

谢谢。

可能这是所有时间多个连接打开的问题,您在代码的某个地方打开连接,而不是正确关闭它们。使用

 using (SqlConnection con = new SqlConnection(connectionString))
        {
            con.Open();
         }

参考本文:http://msdn.microsoft.com/en-us/library/ms254507(v=vs.80).aspx, Visual Basic或c#中的Using块在代码退出块时自动处理连接,即使在未处理的异常情况下。

在开始诅咒你的应用程序之前,你需要检查一下:

  1. 您的应用程序是唯一使用该SQL Server实例的应用程序吗?a.如果答案是否定的,那么你需要调查其他应用程序是如何消耗你的SQl Server.run上的资源的b.如果答案是肯定的,那么你必须调查你的申请。

  2. 运行SQL Server Profiler并检查在使用SQL Server的其他应用程序(1a)中发生的活动,并检查您的应用程序(1b)。

  3. 如果您的应用程序确实缺乏资源,那么您需要进行进一步的调查。欲了解更多信息,请参阅http://sqlserverplanet.com/troubleshooting/sql-server-slowness