COMMIT
提交频繁,花費的時間會上升。提交一千行和提交一行的時間相當
COMMIT前已經完成了99.9%的工作:
*已在SGA中產生了回滾段記錄(UNDO)
*已在SGA中產生了修改數據塊(數據高速緩存區)
*已在SGA中產生了上面兩個的緩沖重做(redo)
*已獲得所有的鎖定
當COMMIT時,所剩下的工作:
*為事務產生一個SCN(system change number)
*LGWR把所有重做日誌緩沖區中的資訊存儲到硬盤的聯機重做日誌檔中並記錄
SCN,且V$TRANSZCTION視圖中的記錄將消失
*釋放會話佔用的所有鎖定
*訪問多個修改事務塊,如果它們仍在數據高速緩沖中,用快速模式訪問和‘清除’
處理COMMIT只有很少的工作要做。時間最長的總是LGWR執行的操作,避免COMMIT
後等待過長時間,LGWR工作:1>每3秒 2>當滿1/3或1MB 3>碰到任何事務COMMIT
ROLLBACK
大量數據回滾花費的時間要長,ROLLBACK必須物理上取消完成工作。
在ROLLBACK之前,數據庫已經做了許多工作:
*已在SGA中產生了回滾段記錄
*已在SGA中產生了修改數據塊(數據高速緩存區?)
*已在SGA中產生了上面兩個的緩沖重做(redo)
*已獲得所有的鎖定
當ROLLBACK時:
*撤銷所有已做的修改。通過從UNDO回滾段讀取數據來完成(逆向操作)
*釋放會話佔用的所有鎖定