累計的力量,delete全表掃描導致程式執行時間過長。

wei-xh發表於2010-07-01
昨天晚上熬夜加班到3點多,主要時間耗在一個做賬業務上,這個業務是三個月前開始的,前幾次做都還是比較快的不到一個小時,可是昨天晚上竟然花費了4個多小時。我手頭工作太多,當時沒顧得上找原因。今天早上分析了一下那個時段的AWR,原來禍首是個DELETE語句。
DELETE ZC67 WHERE BAZ203 = :B2 AND BAC100='0' AND AAE140 = :B1 ;
執行計劃
----------------------------------------------------------
Plan hash value: 318370648
-----------------------------------------------------------------------------
| Id  | Operation          | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | DELETE STATEMENT   |        |     1 |    19 |  2447   (2)| 00:00:30 |
|   1 |  DELETE            | T_ZC67 |       |       |            |          |
|*  2 |   TABLE ACCESS FULL| T_ZC67 |     1 |    19 |  2447   (2)| 00:00:30 |
-----------------------------------------------------------------------------
統計資訊
----------------------------------------------------------
          4  recursive calls
          0  db block gets
      10989  consistent gets

這個語句迴圈的呼叫,執行了接近6萬次。

累計的力量,delete全表掃描導致程式執行時間過長。
1.GIF

整個包的CPU時間是13389,可這個語句就執行了12774秒。(這個語句是包呼叫的)。
解決辦法是對BAZ203增加索引,這個欄位是個序列產生的,每條記錄都唯一。區分度非常好。

之所以前幾次比較快是由於資料量還不大,隨著資料量變大,執行時間長也就在所難免了。

[ 本帖最後由 wei-xh 於 2010-7-1 12:00 編輯 ]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-666809/,如需轉載,請註明出處,否則將追究法律責任。

相關文章