Oracle通过主键id删除记录很慢
問題描述:
Oracle通過主鍵id刪除2000條記錄很慢,需要花費十二分鐘。
解決過程:
1.首先查看SQL的執行計劃,執行計劃正常,cost只有4,用到了主鍵索引。
2.查看等待事件,
select * from v$session_wait where sid = 507
顯示的event是db file sequential read,也沒有異常。
3.查看統計信息是否正常
select * from user_tables where table_name = '';
經檢測,統計信息也是正常的。
4.查看系統IO,也是正常的。
5.找不到原因,開啟SQL跟蹤
alter session set events='10046 trace name context forever,level 12';
delete from t_table1 where id >= xxx
alter session set events='10046 trace name context off';
SQL跟蹤得到一個trace文件
tkprof orcl_ora_3708.trc myoutput.txt
cat myoutput.txt,這次發現異常,文件里面除了有delete語句,還有兩個select語句:
select /*+ all_rows */ count(1) ?from ?"xxx"."T_TABLE2" where "FRESHMANID" = :1 ? call??? count????? cpu??? elapsed????? disk????? query??? current??????? rows ?------- ------? -------- ---------- ---------- ---------- ----------? ---------- ?Parse??????? 1????? 0.00????? 0.00????????? 0????????? 0????????? 0????????? 0 ?Execute? 2000????? 0.23????? 0.22????????? 0????????? 0????????? 0????????? 0 ?Fetch??? 2000??? 720.58??? 740.36??????? 842? 61038000????????? 0??????? 2000 ?------- ------? -------- ---------- ---------- ---------- ----------? ---------- ?total??? 4001??? 720.82??? 740.59??????? 842? 61038000????????? 0??????? 2000
?
select /*+ all_rows */ count(1) ?from ?"xxx"."T_TABLE3" where "FRESHMANID" = :1 ?
call??? count????? cpu??? elapsed????? disk????? query??? current??????? rows ?------- ------? -------- ---------- ---------- ---------- ----------? ---------- ?Parse??????? 1????? 0.00????? 0.00????????? 0????????? 0????????? 0????????? 0 ?Execute? 2000????? 0.27????? 0.27????????? 0????????? 0????????? 0????????? 0 ?Fetch??? 2000????? 1.84????? 1.93????????? 0??? 136000????????? 0??????? 2000 ?------- ------? -------- ---------- ---------- ---------- ----------? ---------- ?total??? 4001????? 2.11????? 2.20????????? 0??? 136000????????? 0??????? 2000
這兩張表各查詢了2000次,可以判斷出來,就是因為這個原因導致delete非常慢,詢問現場相關人員,t_table2、t_table3跟t_table1有什么關系,現場人員說t_table2和t_table3個有一個外鍵
依賴t_table1的主鍵ID,經過查詢,t_table2和t_table3的外鍵上都沒有創建索引,于是創建索引,再執行delete語句,這次執行速度很快,經過SQL跟蹤,也沒有發現去查詢t_table2和t_table3。
更多Oracle相關信息見Oracle 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2014-04/100702.htm
轉載于:https://www.cnblogs.com/smallrock/p/4129085.html
總結
以上是生活随笔為你收集整理的Oracle通过主键id删除记录很慢的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业级控件库之大数据量分页控件 (非原创
- 下一篇: informatica中的workflo