C# Dapper & MySQL случайная ошибка, т.е. фатальная ошибка / сбой чтения из потока и т. Д. - PullRequest
1 голос
/ 02 февраля 2020

Я использую. net основное рабочее приложение (3.1) с MySQL & Dapper.

Это не новая проблема, и я испытывал ее в течение> 1 года, никогда не вызывал большой проблемы, как всегда, задача будет повторена.

Однако сейчас я разрабатываю новую функцию, которая должна обрабатывать> 300-600k строк в течение нескольких секунд, подключаясь сотни раз к базе данных.

Проблема заключается в что случайно в журналах я вижу MySQL .Data.MySqlClient.MySqlExceptions (получать записи с помощью команды Dapper или выполнять команду SQL).

Все они являются обобщенными c, без чего-либо, кроме потока не удалось и операция был отменен.

Самая странная проблема заключается в том, что это происходит ТОЛЬКО в среде Linux (тогда клиент является локальным для экземпляра MySQL). Когда я запускаю его на Windows (через образ VS или Docker), он отлично работает для> 30-кратных тестовых нагрузок.

При развертывании на linux (тот же docker образ, использующий 3.1 как pnet (изображение от Microsoft). Сбой.

Я немного протестировал его непосредственно, опубликовав sh для Ubuntu и сделав tnet, запустил dll и работал нормально, но я пробовал это только ~ 10 раз. .

Так что не большой тест.

Есть идеи, куда мне обратиться? Я пытался убедиться, что Dapper запрос EXE c будет использовать открытое соединение, но это не так. Есть также повторная попытка, но иногда она работает нормально с первой попытки, иногда она будет повторяться 2 раза, а иногда она будет терпеть неудачу 20 раз пять раз подряд.

Не могу точно определить эту проблему, не уверен, что это это Dapper или, может быть, образ Microsoft не рок solid для запуска на Linux ....

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Хорошо, ребята, я нашел решение ...

Во-первых, спасибо всем за помощь.

Причина?

Не менее странно ...

Оказалось, что> 15 различных служб / приложений использовали одну и ту же библиотеку, которая была создана некоторое время go. Это была вспомогательная сборка библиотеки из источника, но по какой-то причине она была создана с использованием зависимостей. net framework /. net core. Кроме того, другая библиотека использовала правильную базовую библиотеку. net.

Эти библиотеки были скрыты в основном от всех приложений, как и зависимые.

Иногда приложение использовало поврежденную библиотеку, которая имела Зависимость в. net Framework, и в этом случае MySQL будет сбой со всеми этими различными ошибками (поэтому я не смог точно определить причину этого). В dev это работало, но для dev мы используем Windows, поэтому мы не смогли поймать его в действии.

Вот почему некоторые приложения странно зависали и вызывали много куча проблем при загрузке.

Очистка поврежденной библиотеки, исправление зависимостей ...

Работает безупречно в течение> 14 часов (в сценарии тестирования с постоянной нагрузкой. Нет единой ошибки.

0 голосов
/ 02 февраля 2020

Reading from the stream has failed - это ошибка, о которой часто сообщают Oracle соединитель MySQL: /NET: ошибка 75917 , ошибка 76597 . Некоторые люди сообщают о различных обходных путях в этих отчетах об ошибках.

Я предлагаю переключиться на MySqlConnector , альтернативную OSS библиотеку ADO. NET для MySQL, которая поддерживает. NET Core, true asyn c I / O и исправляет множество ошибок Connector /NET .

...