我重建已經在過去的五年中開發了一套系統,最初開始與傳統的ASP,我現在正在把整個事情ASP.NET(使用VB.NET)關閉/ MySQL的池ODBC連接
的系統一直困擾着數據連接打開太多的問題,導致週期性的「max_connections is exceeeded」錯誤。
在問我的服務器主機很多次了,我仍然有麻煩,所以認爲我會打開它。
我目前打開連接如下:
Dim sql = "SQL SELECT"
Dim oConnection As OdbcConnection = New OdbcConnection(ConfigurationManager.ConnectionStrings("dbConn").ConnectionString)
oConnection.Open()
openDatabase = New OdbcCommand(sql, oConnection)
連接字符串包含與web.config文件,看起來像這樣
<add name="dbConn" connectionString="DRIVER={MySQL ODBC 3.51 Driver}; SERVER=mysql.dc-servers.com; DATABASE=dbName; UID=user; PASSWORD=pwd; OPTION=3; pooled=true" providerName="System.Data.Odbc"/>
我使用像一個DataReader得到實際數據這個:
Dim objDataReader As OdbcDataReader
objDataReader = openDatabase.ExecuteReader(CommandBehavior.CloseConnection)
While (objDataReader.Read())
// do stuff
End While
objDataReader.Close()
這是我的理解,假設沒有數據或數據庫的錯誤(CommandBehavior.CloseConnection)
應確保當線objDataReader.Close()
關閉閱讀器時,它應該也關閉連接(或將其返回到池)
雖然我收到了這些max_connections錯誤。
看着MySQL管理員打開的進程,我可以看到連接沒有被關閉。
我對連接過程瞭解甚少,而且對MySQL服務器的訪問非常有限,所以很難找出這裏發生的事情......當然......除非我誤解了某些東西,而我希望是這樣,你們可以指點我吧!
感謝您的提示。雖然設置最大/最小池大小沒有任何差別。我正在使用MySQL PHP管理員來查看我可以使用的連接,而流程列表並不提供有關連接正在進行的信息,或者爲什麼它們處於打開狀態,因此很難分辨哪些「開放數據庫」事件導致它。我想我應該手動關閉所有連接並放棄使用'(CommandBehavior.CloseConnection)',我認爲這應該爲我做! – 2011-12-23 18:27:34
您是否嘗試過在關閉了池的情況下執行單個操作,以查看該操作使用的連接是否已關閉?就我個人而言,我總是密切關注我的聯繫以避免這些問題。確保關閉池來執行此測試,因爲池永遠不會真正關閉連接,它只會爲下一個事務保存連接。 – Stainedart 2011-12-23 18:56:03
葉,最初當我開始測試游泳池時,我只是添加了它,看看這是否會有所幫助!似乎沒有做出任何明顯的區別! – 2011-12-23 22:19:52