При оборачивании в транзакцию нескольких программных сервисов или иного вложенного кода, стоит учитывать, что:
- Внутри этих сервисов может быть привязано событие или иной триггер, которое отработает как успешное в то время как транзакция будет отменена. Например, может быть отправлено сообщение пользователю на E-mail или иным способом.
- Вызов фонового события внутри транзакции или обращение к другому сервису не может быть отменено вместе с транзакцией.
- Транзакция в транзакции. Возникает неочевидное поведение в различных БД при использовании rollback, теряется атомарность, если внутренняя транзакция уже сохранена, а внешняя нет (в MySQL это будет считаться одной транзакцией).
- Неуспешная отработка сервиса или иного кода внутри транзакции может быть не очевидна для отката транзакции.
- Слишком строгий уровень изоляции транзакций при сложных процессах внутри самой транзакции может послужить причиной задержек выполнения.