2012-10-16 59 views
2

我正在閱讀關於MySQL: Using Connector/Net with Connection Pooling。建議不要使用全局對象並手動打開/關閉它。此外,建議使用MySqlHelper而不是使用MySqlCommand對象。MySQL Connector Connector with many async inserts

因此,假設我有一個CONNECTION_STRING設置,我可以這樣做:

MySqlHelper.ExecuteNonQuery(CONNECTION_STRING, 
    @"INSERT INTO `table1` (`col3`,`col4`) VALUES (@col3, @col4);", 
    (new List<MySqlParameter>() { 
       new MySqlParameter("@col3", @"another value"), 
       new MySqlParameter("@col4", @"some value")  
      }).ToArray() 
    ); 

現在,假設我做(通過TPL)的異步並行任務上面所說的幾千倍。

我的MySQL服務器上有一些允許的最大連接數,並且我開始引發異常,聲稱用戶超出了最大連接數。我認爲連接池是想爲我自動處理這個問題?驅動程序是不是假設爲我自動集合和排隊?

我已經允許目前1500的最大連接數,和我說這在我的連接字符串:

Pooling=True;minimumPoolSize=0;maximumpoolsize=100;

然而,我仍然得到最大連接數超標。我需要一些關於如何處理許多異步插入的建議,而不會破壞這個最大連接限制。

+0

終於找到了問題,我想MySQL具有'max_connections'作爲一個服務器範圍內的事物(我的是1500),但是也有'max_user_connections'(每個MySQL用戶帳戶的最大連接數),它被設置爲15個。 – user17753

+0

You可以添加您的評論作爲答案,然後在一段時間後接受您自己的答案。 –

回答

3

除了max_connectionsmax_user_connections這裏是重要的。它可以用於查詢:

show variables like 'max_user_connections'; 

爲了避免超出您的MySQL用戶,您需要確保maximumpoolsize(連接字符串)設置爲東西比max_user_connections低和其他應用程序都沒有最大連接數與可能超過上限的相同用戶帳戶建立連接。因此,例如,我可以將我的設置設置爲5,因爲我有一個15的上限。

上限這是大多數託管服務非常常見的限制您正在使用的資源。

在單個連接中執行大量查詢也可能是一種可行的解決方法。

此外,有時主機限制max_queries_per_hour和其他此類變量。