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/