修改隱含參數形成SQL性能降低案例之二

客戶發來這樣一條執行時間 1.3小時的SQL 想作優化:sql



SQL代碼:數據庫

INSERT INTO HWDW.TW_CI_SIM_RES (性能優化

......微信

 )oracle

SELECT    ......性能

FROM HWODS.TO_CI_I91822  S -----大表優化

 ,(spa

 SELECT PHONE_NO,TD_PHONE_NO.net

 FROM  HWDW.TW_CI_PHONE_TD_INFO-----小表code

 WHERE STATIS_DATE = :B1

  )T

WHERE S.PHONE_NO = T.TD_PHONE_NO(+);


經過SQL Monitor顯示的數據發現執行計劃不正常:在Estimate-rows估值正常的狀況下,hash join的大表作了左表,這種狀況通常是相關參數作了改動。


果真,檢查發現,_right_outer_hash_enable 隱含參數被改爲了false 。若是將參數改回默認的TRUE,預計SQL性能會提高10倍左右。


說明:

若是設置了 _right_outer_hash_enable=false ,那麼外關聯只能是主表作hash join的左表,而不考慮表的大小,在主表較大,關聯表小的狀況下,性能會比較差。

這種參數可能在之前的某個版本有bug,客戶升級時仍保留了原來設置的值,建議升級時逐一確認各參數,使數據庫達到最佳性能。


本文分享自微信公衆號 - 老虎劉談oracle性能優化(sql_tigerliu)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索