1. 程式人生 > >oracle 臨時表效能下降

oracle 臨時表效能下降

oracle生產環境上有個儲存過程執行一段時間之後效能下降。初步定位後發現是臨時表的插入效能降低:

insert into  臨時表A (...) select ... from ... .      其中select .. from ...的速度很快,1w多條記錄,查詢時間幾乎是0秒

臨時表A是會話級的臨時表,建表語句:

       Create Global Temporary Table 臨時表A
           (
              id ...

              datatime ...

              .....
        )On Commit Preserve Rows;

       建立了非唯一索引索引: create index idx_A on 臨時表 (id, name).

之前儲存過程的執行不到1秒,現在需要插入1w多條記錄需要130秒左右,慢了n倍。刪除臨時表後重新建立臨時表,速度恢復正常。

 

在網上搜索半天后沒有找到什麼有用資訊,自己測試下效率:

呼叫儲存過程100次, 單連線執行12秒。兩個連線併發執行,每個需要30秒。三個連線併發執行,每個需要45秒。4個連線併發執行,每個需要70多秒。

 

結論:oracle會話級臨時表的效率在多併發的情況下會效能會急劇下降。儘量避免使用。

 

該問題後續解決方法還在測試跟蹤中,有結論再通知