首页 文章

MySqlException:从池中获取连接之前经过的超时时间

提问于
浏览
1

异常信息:异常类型:MySqlException异常消息:连接错误:超时已过期 . 从池中获取连接之前经过的超时时间 . 这可能是因为所有池连接都在使用中并且达到了最大池大小 .

以上是我在事件查看器中收到的错误 . 这个例外似乎只发生在我们的开发服务器上 . 它是一个内部仓库管理和私人公司网上商店 . 我们在给定时间内只有不到100个用户,这就是我所理解的:

  • 由于开放线程太多,无法 Build 连接 .

我为解决这个问题所做的一切:

  • 强制在应用程序的connectionstring中启用"Pooling=True;" .

  • 强制"Max Pooling Size=1000;"在应用程序的connectionstring中 .

  • 在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();
        }
    }

1 回答

  • 2

    尝试在修改后保存连接字符串 .

相关问题