Это во многом зависит от реализации транзакций внутри вашей базы данных, а также может зависеть от уровня изоляции транзакций, который вы используете. Я предполагаю «повторяемое чтение» или выше здесь. Удержание транзакций в течение длительного времени (даже если они ничего не изменили) заставляет базу данных удерживать удаленные или обновленные строки часто меняющихся таблиц (на случай, если вы решите их прочитать), которые в противном случае могли бы быть отброшены.
Кроме того, откат транзакций может быть очень дорогим. Я знаю, что в движке MySQL InnoDB откат большой транзакции может занять FAR дольше, чем ее принятие (мы видели, что откат занял 30 минут).
Другая проблема связана с состоянием соединения с базой данных. В распределенном отказоустойчивом приложении вы никогда не сможете по-настоящему узнать, в каком состоянии находится соединение с базой данных. Соединения с базой данных с сохранением состояния не могут быть легко поддержаны, поскольку в любой момент они могут перестать работать (приложение должно помнить, в каком оно было состоянии). середина делает это и переделывает это). Те, которые не имеют состояния, могут быть просто переподключены, и их (атомарная) команда будет повторно выдана без (в большинстве случаев) прерывистого состояния.