异常信息:异常类型: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 回答
尝试在修改后保存连接字符串 .