2017-01-20 5 views
2

У меня есть приложение .NET, которое выполняет запросы в базе данных MySQL в Amazon Aurora RDS. База данных - это база данных MySQL 5.6 - версия, которая поставляется с Aurora.Сервер AWS Aurora иногда отвечает «Неизвестной базой данных: ...»

Выполняю запросы по схеме (имя: полет) в базе данных (имя: SSIMLoader). Я использую библиотеки MySQL 6.9.8.0.

Редактировать: Строка подключения указывает на главный сервер в кластере, а не на определенный сервер.

Ошибка при вставке, выборе и обновлении, поэтому нет реального шаблона. Даже простые утверждения select выходят случайным образом.

Однако мы не получаем такой ошибки при выполнении запросов через Workbench MySQL.

После перезапуска сервера ошибка исчезает в течение нескольких дней, а затем возвращается.

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

Кто-нибудь еще испытал это, и если да, то как вы прошли мимо него?

Заранее благодарен.

  • редактировать: Наконец получил ошибку снова:

    MySql.Data.MySqlClient.MySqlException (0x80004005): Неизвестный базы данных 'Полет' в MySql.Data.MySqlClient.MySqlStream.ReadPacket () в MySql.Data.MySqlClient.NativeDriver.ReadOk (Boolean чтение) в MySql.Data.MySqlClient.MySqlConnection.ChangeDatabase (Строка Databasename) в MySql.Data.MySqlClient.MySqlConnection.Open() в MySql.Data. MySqlClient.MySqlConnection.Open() в Universal.Access.Database.BaseDatabaseConnection.EstablishFactoryConnection() в Universal.Access.Database.BaseDatabaseConnection.ExecuteReader (CommandType commandType, CommandText commandText) в Universal.Core.DataModel.ExecutableDatabaseConnection.ExecuteQuery (String sqlQuery) в C: \ TC-проекты \ универсального платформы \ Universal.Core \ DataModel \ ExecutableDatabaseConnection.cs: линия 65

Это запрос, который был запущен:

UP-DEV | Universal.Core.Data.Importer Error finding current record, SQL: SELECT aircraft_config,updated_by,asa_flight_id,atd_utc,bay,terminal,is_cancelled,flight_number,created_at,from_iata,flight_date_utc,std_local,takeoff_time_local,is_international,is_aerocare,cobt_local,customer_atd_local,takeoff_time_utc,std_utc,atd_local,asa_state,aircraft_type,customer_atd_utc,carrier_code,updated_at,gate,service_type,etd_local,cobt_utc,flight_status,etd_utc,aircraft_rego,created_by,id,flight_date,to_iata FROM flight.departure_flight WHERE carrier_code='JQ' AND flight_date_utc='2017-01-20T00:00:00' AND flight_number='57' AND from_iata='MEL'. Database returned: Unknown database 'flight'

+2

Я не верю, что это сообщение на самом деле происходит от Авроры. Или, по крайней мере, я подозреваю, что этого может не быть. Ошибки с сервера Aurora [должны иметь номер ошибки] (https://dev.mysql.com/doc/connector-net/en/connector-net-ref-mysqlclient-mysqlexceptionmembers.html) вместе со стандартным сообщением и «Невозможно найти базу данных» не похоже на стандартное сообщение, обнаруженное в исходном исходном коде - и Aurora обычно использует стандартные ошибки. Какая * точная * формулировка ошибки и какой сопроводительный код? –

+0

@ Michael-sqlbot - я редактировал вопрос, чтобы показать ошибку, как я ее вижу в журналах. – Vaelen

+0

@ Michael-sqlbot, я бы согласился с тем, что, как правило, у баз данных есть номера ошибок, но поскольку это «измененная» версия MySQL, созданная специально AWS, они могут скрывать числа. – Vaelen

ответ

1

Таким образом, эта ошибка возникает, когда экземпляр экземпляра Aurora имеет значение 100%. Соединение не может найти указанную базу данных, потому что она не может подключиться к экземпляру, так как нет никаких потоков, с которыми можно установить соединение.

+0

Я нахожусь в разработке на данный момент без производственного трафика. Процессор на моих экземплярах составляет около 5% (похоже, это состояние покоя), и я часто получаю эту ошибку, что мое приложение не может выполнить его через код запуска. – bikeman868

+0

Мы до сих пор не знаем, почему это происходит. Мы не смогли воспроизвести ошибку за пределами наших производственных систем, и теперь она настолько спорадична, что было принято решение скорее обработать ее в нашем коде, чем попытаться расшифровать ее происхождение. – Vaelen

+0

Я исправил проблему на данный момент, увеличив размер моего экземпляра от среднего до 2xlarge, но это кажется излишним для среды разработки – bikeman868

3

Хотя я не уверен, что конкретно вызывает проблему (кажется, что открытое соединение может как-то закончиться в сломанном состоянии на стороне кластера RDS), похоже, что проблема раздражает агрессивный пул соединений и повторное использование на стороне клиента, происходящее в MySQL .NET Connector.

После того, как проблема возникла, затронутые соединения, похоже, просто остаются в пуле, получая произвольно выбранные резервные копии из пула и повторно используемые снова и снова. (Вероятно, это связано с тем, как вы видите, что проблема продолжает происходить случайным образом, как только она началась.)

Добавление Connection Lifetime=x к строке подключения, x - время в секундах, в течение которого соединение поддерживается вживую для повторного использования. по крайней мере, уменьшить симптомы.

+1

+1 для уменьшения симптомов. К сожалению, я думаю, что из-за случайного характера проблемы воспроизведение этого будет непростым, и, следовательно, оно никогда не может быть исправлено. – Vaelen