2014-09-03 2 views
3

Я разрабатываю приложение, которое в рамках одной транзакции записывает в таблицу, а затем читает эту таблицу. Как только это будет сделано, эти изменения больше не нужны и могут быть безопасно отброшены. Но, с другой стороны, изменения не будут мешать чему-либо еще, если они совершены.Есть ли разница между накладными расходами между COMMIT и ROLLBACK?

Короче говоря, я могу использовать либо откат, либо фиксацию, чтобы завершить транзакцию, с учетом только эффективности.

Так что, если любой из них будет быстрее, чем другой, и почему?

+0

Настоящая таблица, или глобальная временная таблица? –

+0

Настоящий стол. Хотя я мог бы легко изменить его на глобальную временную таблицу, если бы это имело значение. – Malnormalulo

ответ

5

Oracle генерирует повторные файлы журналов on-line и отменяет данные. Онлайновые файлы журналов повторения содержат инструкции DML/DDL для повторной транзакции (в случае затемнения) и для отмены ваших данных, если вызывается оператор отката.

Commit - очень быстрый оператор, его время постоянное и не зависит от размера транзакции. Это возможно, потому что процесс LGWR записывает повторные изменения на диск во время транзакции в фоновом режиме. Если вы используете асинхронные коммиты, например, с commit write nowait batch;, время фиксации будет почти равно 0.

Откат зависит от размера транзакции, так как он должен отменить любое утверждение, которое вы имеете в файлах журнала повтора, которые связан с транзакцией, поэтому время транзакции может быть равно времени откат транзакции.

Для краткосрочной сделки могут быть различия, но для среднесрочной и долгосрочной транзакций вы заметите, что время или откат почти равны времени транзакции.

2

Commit должен быть быстрее, потому что Oracle использует «быструю фиксацию», то есть предполагает, что вы производите фиксацию в любом случае и сразу же записываете изменения в файлы DB или буферный кеш.

Поскольку вы все еще можете откатить, он сохраняет информацию «до» в своих откатных сегментах. Передача по существу отбрасывает части сегментов отката и отмечает транзакцию как совершенную.

Откат, однако, как полное «отмена» в приложении. Oracle нуждается в замене фактического представления данных данными в сегментах отката. Это настоящая работа.

В конце концов вам нужно очистить данные, а затем вам нужно потратить некоторое время.

Смежные вопросы