c# - MySql 异常 : The timeout period elapsed prior to obtaining a connection from the pool

标签 c# mysql asp.net exception connection-pooling

Exception information: Exception type: MySqlException

Exception message: error connecting: 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.

以上是我在事件查看器中遇到的错误。这个异常似乎只发生在我们的开发服务器上。它是一个内部仓库管理和私有(private)公司网上商店。在给定时间我们只有不到 100 个用户,这是我的理解:

  • 无法建立连接,因为打开的线程太多。

我为解决问题所做的事情:

  • 强制启用“Pooling=True;”在应用程序的连接字符串中。
  • 强制“最大池化大小=1000;”在应用程序的连接字符串中。
  • 在 MySQL Administrator 中将连接线程空闲生命周期从 8 小时减少到 2 小时。
  • 将 MySQL Administrator 中允许的最大连接数增加到 1000。

这似乎仍然会导致同样的问题,我目前无能为力。为了破坏控制这个问题,我正在杀死线程超过一两个小时的用户。我监测到在这些崩溃期间最多只有大约 108 个连接。 有一次它在有 40 个 IDLE 线程时停止接受连接。

以下是用于进行交易的代码。

   /// <summary>
   /// Begin a database transaction.
   /// </summary>
   /// <returns>The database connection.</returns>
    public DbTransaction BeginTransaction()
    {
        if (_DbConnection.State != ConnectionState.Open)
        {
            _DbConnection.Open();
        }
        return _DbConnection.BeginTransaction();
    }

    /// <summary>
    /// Commit a database transaction.
    /// </summary>
    /// <param name="transaction">The database connection.</param>
    public void CommitTransaction(DbTransaction transaction)
    {
        if (transaction != null)
        {
            transaction.Commit();
            transaction.Dispose();
        }
        if (_DbConnection != null)
        {
            _DbConnection.Close();
        }
    }

    /// <summary>
    /// Rollback a database transaction.
    /// </summary>
    /// <param name="transaction">The database transaction.</param>
    public void RollbackTransaction(DbTransaction transaction)
    {
        if (transaction != null)
        {
            transaction.Rollback();
        }
    }

最佳答案

尝试在修改后实际保存连接字符串。

关于c# - MySql 异常 : The timeout period elapsed prior to obtaining a connection from the pool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21847683/

相关文章:

c# - 找不到段 'Property' 的资源

mysql - 列出所有用户按对话排序的消息

mysql - 如何查询两个mysql表并拉取不在两个表和/或满足条件指定的结果

c# - 在 visual studio 中使用母版页实现 html/css 框架

c# - Windows 8 Metro 应用程序 - 渲染 PNG

c# - .NET:从数组中对象的动态属性中检索值

javascript - 使用 jQuery 隐藏和显示数据列表的更多行

asp.net - 删除asp.net中jqgrid中的记录

c# - 使用证书从 .net 调用 php webservice

php - 如何将数据从表单插入数据库?