Закрытие / пул соединений MySQL ODBC - PullRequest
0 голосов
/ 23 декабря 2011

Я перестраиваю систему, которая разрабатывалась в течение последних пяти лет, изначально была запущена в 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, поэтому изо всех сил пытаюсь найтииз того, что здесь происходит ... если, конечно, ... я что-то неправильно понял, что, я надеюсь, так, и вы, ребята, можете указать мне на это!

1 Ответ

0 голосов
/ 23 декабря 2011

Я не знаю много о DataReader, но, похоже, вам нужно найти эту утечку. Сначала я бы предложил вручную установить размер пула в строке подключения с помощью атрибутов: Макс. И Мин. Размер пула, см. Подробнее: http://dev.mysql.com/doc/refman/5.0/en/connector-net-connection-options.html

Я бы также предложил следить за открытием и закрытием соединения с отключенным пулом, чтобы увидеть, что на самом деле происходит с жизненным циклом соединения. Вы можете использовать в консоли MySQL

show processlist;

Для просмотра текущих подключений и

show global status;

Для контроля всех атрибутов БД. Я также предложил бы прочитать эту статью из mysql, объясняющую «проблему слишком большого количества соединений»

http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

Убедитесь, что конфигурация mysql соответствует конфигурации вашего приложения, чтобы убедиться, что вы не разрешаете слишком много подключений, чем на самом деле позволяет сервер.

Приветствия

...