2014-09-03 59 views
3

我正在开发一个应用程序,它在单个事务中写入一个表,然后读取该表。一旦完成阅读,这些更改不再需要,可以安全地丢弃。但另一方面,如果他们犯了这些变化,这些变化不会干涉其他任何事情。COMMIT和ROLLBACK之间的开销是否有差异?

总之,我可以使用回滚或提交来结束事务,只考虑效率。

那么,哪一个,哪一个,哪个比另一个快,为什么?

+0

真正的表或全局临时表吗? – 2014-09-03 16:37:56

+0

一个真实的表格。虽然我可以很容易地将它改为全球临时表,如果这有所作为。 – Malnormalulo 2014-09-03 16:42:38

回答

5

Oracle生成重做联机日志文件和撤消数据。在线重做日志文件包含DML/DDL语句以重做您的事务(在发生中断时)并在调用回滚语句时撤消数据。

提交是一个非常快的运算符,它的时间是不变的,不依赖于事务的大小。这是可能的,因为LGWR进程在后台事务中将重做更改写入光盘。如果使用异步提交,例如commit write nowait batch;,提交的时间将几乎等于0.

回滚取决于事务的大小,因为它需要撤消重做日志文件中的任何语句,与事务有关,所以事务的时间可能等于事务的回滚时间。

对于短期交易可能没有区别,但对于中期和长期交易,您会注意到时间或回滚几乎等于交易时间。

2

提交应该更快,因为Oracle使用“快速提交”,即它假设您将提交任何内容并立即将更改写入DB文件或缓冲区缓存。

由于您可能仍决定回滚,因此它会在回滚信息中存储“before”信息。提交基本上放弃部分回滚段并将事务标记为已提交。

但是,回滚就像应用程序中的完全“撤消”。 Oracle需要用回滚段中的内容替换其实际的数据视图。这是真正的工作。

仍然最终你需要清理你的数据,然后你需要投入一些时间。

相关问题