請教一下 我這邊 有一個存盤封裝了 表資料的采集任務
回圈執行
insert /*+ APPEND*/into t (t.1,t.2)select /*+PARALLEL(a,4)*/ a.1,a.2,nvl((select c.2 from c where a.1 = c.1),1) from a where 1=1;
大部分執行都很快 就是有一張表 7W多筆的資料執行了 50多分鐘,同樣7W多筆資料的表1秒鐘就執行完了,這個問題出在哪里?
uj5u.com熱心網友回復:
具體情況要具體分析,你這啥資訊都沒的,只能憑主觀猜測了uj5u.com熱心網友回復:
1,先看看SQL查詢塊不快2,可能因為你加了并發,當時你的CPU實用率過高導致遇到瓶頸,需查看下CPU情況
3,你用了APPEND,可能你的表a高水位比較高或者表碎片比較大(行鏈接、行遷移導致),建議重導下表或者重建表
uj5u.com熱心網友回復:
1.看了下查詢速度7W多筆的資料1秒不到查詢完成;
2.看了服務器上這條執行時間的CPU,使用率并不高7%左右
3.每次執行前都會 DROP TABLE a CASCADE CONSTRAINTS PURGE;再create table;
uj5u.com熱心網友回復:
1.查詢的錯了,執行的是 select count(*) from (select a.1,a.2 from table); 應該不準確
uj5u.com熱心網友回復:
50多分鐘的時候查看 v$session_Wait視圖,看看里面有什么等待事件,再做針對性的分析uj5u.com熱心網友回復:
一看就知道(select c.2 from c where a.1 = c.1), 這個有問題了把這個寫成left join 跑的飛起
uj5u.com熱心網友回復:
并不能改,因為不單單只跑一張,回圈呼叫的,每張表的欄位映射都不同
其他表都能正常執行 唯獨這張會跑50多分鐘
uj5u.com熱心網友回復:
這種sql只適合查詢,不適合全表關聯的,不然每一條記錄都要遍歷一次C表,性能耗在這里uj5u.com熱心網友回復:
如果你一定要這樣的話要確保C表有索引,有索引的話也不會很慢轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/103478.html
標籤:高級技術
上一篇:表分割和表磁區哪個更有效率
下一篇:關于備份恢復
