2014-09-03 44 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需要用回滾段中的內容替換其實際的數據視圖。這是真正的工作。

仍然最終你需要清理你的數據,然後你需要投入一些時間。

相關問題