天天看點

修改隐含參數造成SQL性能下降案例之二

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

修改隐含參數造成SQL性能下降案例之二

SQL代碼:

INSERT INTO HWDW.TW_CI_SIM_RES (

......

)

SELECT ......

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

,(

SELECT PHONE_NO,TD_PHONE_NO

FROM HWDW.TW_CI_PHONE_TD_INFO-----小表

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,客戶更新時仍保留了原來設定的值,建議更新時逐一确認各參數,使資料庫達到最佳性能。