久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle SQL執(zhí)行計劃異常的處理方法

147次閱讀
沒有評論

共計 1914 個字符,預計需要花費 5 分鐘才能閱讀完成。

這篇文章主要介紹“Oracle SQL 執(zhí)行計劃異常的處理方法”,在日常操作中,相信很多人在 Oracle SQL 執(zhí)行計劃異常的處理方法問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”O(jiān)racle SQL 執(zhí)行計劃異常的處理方法”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!

現(xiàn)象:
下面語句一直以來都比較高效,執(zhí)行計劃用了索引范圍掃描后經(jīng)歷三次嵌套循環(huán),可在 2 秒內(nèi)返回結(jié)果,但今天經(jīng)同事反映卻走了 1 分多鐘!

原 SQL 語句:

Select * From (Select Rownum As Rownumber__, t.*
 From (Select T1.Orderdate As  OrderDate ,
 T1.Status As  Status ,
 T1.Ordercode As  OrderCode ,
 T1.Sumamt As  SumAmt ,
 T1.Ordertype As  OrderType ,
 T1.Questiondesc As  QuestionDesc ,
 T1.Ordersource As  OrderSource ,
 T2.Accepter As  Accepter ,
 T2.City As  City ,
 T1.Isquestion As  IsQuestion ,
 T1.Issplit As  IsSplit ,
 T1.Salemode As  SaleMode ,
 T1.Stockout As  StockOut ,
 T2.Encmobile As  EncMobile ,
 T2.Encphone As  EncPhone ,
 Decryptbykey(T2.Mobilephone) As  MobilePhone ,
 T2.Province As  Province ,
 T3.Checkercode As  CheckerCode ,
 T3.Iscancel As  IsCancel ,
 T3.Ischeck As  IsCheck ,
 T3.Isclose As  IsClose ,
 T3.Isfinish As  IsFinish ,
 T1.Ischange As  IsChange 
 From Xs_Order T1 Join Xs_Orderpsaddress T2 
 On T1.Ordercode = T2.Ordercode Join Xs_Orderstatus T3 
 On T1.Ordercode = T3.Ordercode 
 Order By T1.Ordercode Desc) t 
 Where  OrderDate   = :Orderdate0 And  StockOut  = :Stockout1) Temp
 Where Rownumber__   0and Rownumber__  = 20

后來查看執(zhí)行計劃,執(zhí)行計劃變成:

分析:
由于后面兩個表是大表,全表掃描導致大量的 IO 消耗,該語句采用了綁定變量,如果把綁定變量調(diào)整為常量后,執(zhí)行計劃正常走了索引連接,執(zhí)行后返回也是在 2 秒內(nèi)。曾經(jīng)以為是綁定變量窺探異常問題,后來把表的統(tǒng)計信息重新更新后,問題依舊,接著運行 SQL TUNNING 包,概要只建議說要啟用并行,但全表掃描并沒有消除,考慮到代價太高就放棄,于是想用 DBMS_SPM 包來載入該語句:

BASELINE:
declare
l_pls number;
begin
l_pls := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id=   a0wawpy5hfrt3 ,
plan_hash_value =  2253704843, -- 注意這里的 2253704843 是我用常量帶入后正常的 PLAN_HASH_VALUE
enabled =   YES 
end;

執(zhí)行后,發(fā)現(xiàn)語句還是走了錯誤的執(zhí)行計劃,曾經(jīng)考慮想用捕捉基線的方式進行演化,但由于該語句帶綁定變量,會話級比較難搞,所以想到用包刪除共享池里的該執(zhí)行計劃,讓它重新進行硬解析:操作如下:

exec dbms_shared_pool.purge(0000000DE5E6B808,2332516131 ,  c)

–第一個參數(shù)為 v$sqlarea 中 address 和 hash_value,第二個為 cursor 類型 )

處理后執(zhí)行計劃重新產(chǎn)生,并自動應(yīng)用了 2253704843 這個執(zhí)行計劃,查詢效率正常:

到此,關(guān)于“Oracle SQL 執(zhí)行計劃異常的處理方法”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-28發(fā)表,共計1914字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 周口市| 黑河市| 岳阳市| 商水县| 邯郸县| 辉南县| 余干县| 南昌市| 株洲县| 临江市| 澄江县| 东阿县| 天峻县| 柳州市| 响水县| 台山市| 北辰区| 澄迈县| 东丰县| 南漳县| 千阳县| 东平县| 云和县| 志丹县| 汉阴县| 唐海县| 尉犁县| 稷山县| 阜平县| 普兰店市| 闸北区| 建昌县| 集贤县| 朝阳县| 磐石市| 赫章县| 新建县| 绿春县| 仪陇县| 满洲里市| 家居|