Есть ли способ возобновить (длинную) транзакцию после того, как основное соединение MySQL было потеряно? - PullRequest
0 голосов
/ 10 марта 2012

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

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

Можно ли вообще восстановить потерянное соединение, чтобы продолжить транзакцию?

Я использую MySQL Connector для .NET.

Ответы [ 2 ]

1 голос
/ 04 мая 2012

Теоретически вы можете делать именно то, что вам нужно, с транзакциями XA ... но ограничения mysql довольно радикальны и делают транзакции XA на mysql шуткой, если честно: и возобновление, и присоединение в начале и в конце с приостановкой не являются работает (с 2006 года, когда это было впервые выпущено). Так что ответить на ваш вопрос нет! Нет шансов с MySQL, забудь об этом! Попробуйте увеличить тайм-ауты (как на клиенте, так и на сервере), пулы памяти, оптимизировать запросы и т. Д. MySQL здесь вам не поможет.

1 голос
/ 10 марта 2012

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

Если ваша частота отбрасывания соединения слишком высока, и у вас нет контроля над ее исправлением, то вам следует сделать простые запросы без транзакции или «Лучше сделать количество действий в вашей транзакции меньше» иОтправьте пакет транзакций вместо одной большой транзакции.

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

...