Добровольная транзакция MySQL InnoDB станет жертвой тупика
Есть ли в MySQL механизм (5.6 или более поздний), чтобы иметь транзакцию (или оператор), чтобы добровольно стать жертвой в случае, если она вовлечена в тупик?
При обнаружении взаимоблокировки InnoDB, когда обнаружена взаимоблокировка, InnoDB определяет, какую транзакцию нужно убить (чтобы стать жертвой), чтобы позволить другим транзакциям продолжаться. Есть алгоритм, используемый для определения, какая транзакция является жертвой.
Мой вопрос заключается в том, существует ли какой-либо синтаксис, который мы можем использовать в операторе, который будет влиять на алгоритм, который в основном говорит InnoDB: "Если этот оператор / транзакция вовлечен в тупик, тогда выберите меня в качестве жертвы".
1 ответ
"Это гораздо, гораздо лучше, что я делаю..." - TRX #8675309
Текущий алгоритм, для которого транзакция прерывается в случае взаимоблокировки, заключается в том, что транзакция, которая изменила меньшее количество строк, уничтожается. В случае ничьей выбор делается произвольно по внутреннему коду InnoDB; мы не знаем причину выбора.
Таким образом, единственный способ, которым одна транзакция может "добровольно" изменить это, - изменить меньше строк, чем другая транзакция.