Использование when any do
внутри блока автономной транзакции не откатит транзакцию, вместо этого он будет зафиксирован после завершения блока, поскольку исключение не выходит за пределы блока.
Однако, это, вероятно, желаемый результат: фиксация транзакций в Firebird (относительно) дешевле, чем откат. Фактически, если транзакция откатывается, когда ничего не было изменено, Firebird все равно преобразует откат в коммит.
Я не думаю, что это является причиной вашей проблемы с производительностью, но без воспроизводимого примера это Трудно рассуждать об этом.
Помимо этого, транзакции с состоянием 3 откатываются, и транзакции отменяются. MON$TRANSACTIONS
показывает только активные транзакции, поэтому откат транзакций не будет отображаться в этой виртуальной таблице.