Я перестраиваю систему, которая разрабатывалась в течение последних пяти лет, изначально была запущена в Classic ASP. Сейчас я перевожу все это в ASP.NET (с использованием VB.NET)
Система страдает от проблемиз-за постоянной проблемы с слишком большим количеством открытых подключений к данным, что приводило к периодическим ошибкам «max_connections is превышен».
После того, как я много раз спрашивал об этом у моего сервера, у меня все еще возникают проблемы, поэтому я думал, что откроюдо SO.
В настоящее время я открываю соединения следующим образом:
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, поэтому изо всех сил пытаюсь найтииз того, что здесь происходит ... если, конечно, ... я что-то неправильно понял, что, я надеюсь, так, и вы, ребята, можете указать мне на это!