Когда вы получаете тупик, одна из задействованных транзакций откатывается.Откат транзакции является относительно дорогим для сервера и требует усилий, которые в противном случае он потратил бы на реальную работу;Более того, первоначальная транзакция должна быть выполнена снова.
Однако вы должны стремиться иметь очень небольшое количество взаимоблокировок в вашем приложении.Если 1% транзакций зашло в тупик, это может быть слишком много.
К счастью, разработчики InnoDB знали, что взаимоблокировки являются потенциальной проблемой производительности, и пытались сделать откат InnoDB транзакцией, которая выполнила «меньше работы».Какая бы транзакция не выполнялась с момента ее запуска, будет выполнена откат.Поэтому, если одна транзакция выполнила миллион вставок, а другая - только одну, транзакция с одной вставкой, вероятно, будет отменена.
InnoDB не очень эффективен для отката больших транзакций.В одной системе я видел, что транзакция откатывается за 45 минут.
Вообще говоря, если вы обнаружите, что получаете много взаимоблокировок, это может быть связано с проблемой разработки приложения.Например, если вы регулярно выполняете огромные запросы на обновление, это может указывать на то, что ваша база данных недостаточно нормализована (например).