2014-02-18 20 views
1

異常信息的連接之前經過超時時間超時過期。在從池中獲取連接之前已超時。此 可能發生,因爲所有池連接都在使用中,並且已達到最大池大小。個MySqlException: 異常類型::個MySqlException</p> <p>異常消息:錯誤連接:從池中獲取

以上是我在事件查看器中遇到的錯誤。這個例外似乎只發生在我們的開發服務器上。這是一個內部倉庫管理和私人公司網店。我們有它不到100的用戶在給定的時間,這是我的理解:

  • 連接無法進行,因爲有太多打開的線程。我已經做了

事情來試圖解決這個問題:

  • 強制啓用 「池= TRUE;」在應用程序的連接字符串中。
  • Force「Max Pooling Size = 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(); 
     } 
    } 
+0

你如何執行對數據庫的查詢?你在處理db連接/命令嗎? –

+0

@IvanMilosavljevic我用我用來做查詢的代碼更新了這個問題。 – Perfection

回答

2

嘗試實際保存連接字符串後修改它們。

+0

謝謝,這解決了我的問題! – Perfection