首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySqlException:从池获得连接之前经过的超时时间

MySqlException:从池获得连接之前经过的超时时间
EN

Stack Overflow用户
提问于 2014-02-18 08:11:38
回答 1查看 2.5K关注 0票数 1

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

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

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

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

  • 在应用程序的连接字符串中强制启用"Pooling=True;“。
  • 强制应用程序的连接字符串中的"Max池Size=1000;“。
  • 在MySQL管理员中,将连接线程空闲生存期从8小时减少到2小时。
  • 将MySQL管理员中允许的最大连接增加到1000。

这似乎仍然造成了同样的问题,我目前正处于我的智囊团。为了破坏控制这个问题,我用超过一到两个小时的线程杀死了用户,我监测到在这些崩溃期间,最多只有108个连接。有一次,当有40个空闲线程时,它停止接受连接。

下面是用于进行事务处理的代码。

代码语言:javascript
复制
   /// <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();
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-19 11:03:37

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21847683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档