oracle 臨時表效能下降
阿新 • • 發佈:2018-12-19
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會話級臨時表的效率在多併發的情況下會效能會急劇下降。儘量避免使用。
該問題後續解決方法還在測試跟蹤中,有結論再通知