溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle性能優(yōu)化-SQL優(yōu)化(案例四)

發(fā)布時間:2020-08-15 13:40:56 來源:ITPUB博客 閱讀:232 作者:chenoracle 欄目:關系型數(shù)據(jù)庫

Oracle 性能優(yōu)化 -SQL 優(yōu)化 ( 案例四 )

環(huán)境:

DB:Oracle 11.2.0.1.0

問題:

ERP 薪資發(fā)放節(jié)點計算時間耗時 較長,需要15 分鐘左右;

問題原因:

有兩個SQL 執(zhí)行特別慢

第一個查詢WA_CACU_DATA SQL ,在 plsql 中執(zhí)行特別快,返回 0 條,懷疑某些堆表被當成臨時表使用,導致執(zhí)行計劃有問題,手動刪除和鎖定這些表的統(tǒng)計信息后查詢 SQL 速度有明顯提高;

第二個更新WA_CACU_DATA SQL ,第一次執(zhí)行快,第二次執(zhí)行慢,執(zhí)行計劃不穩(wěn)定,禁用基數(shù)反饋 (_optimizer_use_feedback) 后速度正常;

解決過程:

問題重現(xiàn)時,查看主要慢在兩個SQL ,一個 select wa_cacu_data ... ,另一個 update  ...;

Oracle性能優(yōu)化-SQL優(yōu)化(案例四)

Oracle性能優(yōu)化-SQL優(yōu)化(案例四)

耗時長的查詢SQL 如下

Oracle性能優(yōu)化-SQL優(yōu)化(案例四)

執(zhí)行計劃如下:

Oracle性能優(yōu)化-SQL優(yōu)化(案例四)

Oracle性能優(yōu)化-SQL優(yōu)化(案例四)

解決方案:

plsql 中執(zhí)行特別快,返回 0 條,懷疑某些堆表被當成臨時表使用,導致執(zhí)行計劃有問題,手動刪除和鎖定這些表的統(tǒng)計信息后查詢 SQL 速度有明顯提高;

SQL> exec dbms_stats.delete_table_stats( cjc , tbm_period );

SQL> exec dbms_stats.delete_table_stats( cjc , org_adminorg );

SQL> exec dbms_stats.delete_table_stats( cjc , org_hrorg );

SQL> exec dbms_stats.lock_table_stats( cjc , tbm_period );

SQL> exec dbms_stats.lock_table_stats( cjc , org_adminorg );

SQL> exec dbms_stats.lock_table_stats( cjc , org_hrorg );

二:耗時長的update 語句

抓取完整sql 單獨執(zhí)行時,發(fā)現(xiàn)第一次執(zhí)行很快,第二次執(zhí)行特別慢,并且第一次和第二次生成的執(zhí)行計劃不一樣,第二次執(zhí)行計劃帶有“ cardinality feedback used for this statement ”,懷疑和 oracle 11g 基數(shù)反饋特性有關,導致執(zhí)行計劃不穩(wěn)定, SQL 執(zhí)行效率低。

解決方案:

session 級別禁用基數(shù)反饋后,多次手動執(zhí)行 SQL ,速度穩(wěn)定變快了。

alter session set "_optimizer_use_feedback"=false;

臨時解決辦法可以考慮系統(tǒng)級別禁用基數(shù)反饋,或研發(fā)更改代碼,在sql 級別增加 hint 禁用基數(shù)反饋。

alter system set "_optimizer_use_feedback"=false;

歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!??! Oracle性能優(yōu)化-SQL優(yōu)化(案例四)

Oracle性能優(yōu)化-SQL優(yōu)化(案例四)

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI