Цитата:
Сообщение от
Zabr
Как раз наоборот. Много мелких транзакций в цикле выполняются заметно дольше, чем одна общая транзакция на весь цикл. Время тратится на отдельное открытие-закрытие каждой мелкой транзакции.
Так ведь куча логов пишется, и чем дольше транзакция открыта, тем больше их пишется, и тем больше памяти используется для этого (чтобы можно было успешно откатить транзакцию в случае сбоя).
Также могут начать возникать блокировки чтения (правда зависит от версии системы и уровня изоляции при чтении - READ_COMMITTED_SNAPSHOT в SQL 2005 говорят проблему эту решает)
И если транзакция будет длится, скажем, 4 часа, но через 3:59 выключат свет в серверной

, то после перезагрузки 4 часа БД будет недоступна, пытаясь откатить все эти изменения. То же будет в случае отката по ошибки в процессе обработки (я думаю, что именно по этой причине там сделали создание журнала с ошибками вместо отката всех строк, как в заказах на покупку/продажу).
Поэтому время на открытия/закрытия мелких транзакций выгоднее с точки зрения скорости. Но целостность данных дороже.