溫馨提示×

溫馨提示×

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

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

Oracle如何通過注釋改變執行計劃

發布時間:2021-11-10 14:03:39 來源:億速云 閱讀:371 作者:小新 欄目:關系型數據庫

小編給大家分享一下Oracle如何通過注釋改變執行計劃,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Oracle 通過注釋改變執行計劃

一:問題現象

T_XXX表同步延時1小時,其它表同步速度正常;

主要慢在同步時的一個delete T_XXX語句上,單條執行耗時12秒;

 

二:問題原因

T_XXX表存在唯一性索引,理論上速度很快;

查看T_XXX表存在delete行級觸發器,查看觸發器邏輯,發現觸發器內一個update語句特別慢;

UPDATE CHENJCH.T_CHENJCH_RISK ..where  RISK_ID ....

查看執行計劃,update語句走全表掃描,速度很慢,通過hint強制走主鍵索引,速度特別快;

為什么執行計劃不走主鍵?

查看T_CHENJCH_RISK表統計信息顯示表有0行數據,但是實際上有200萬行數據;

由于數據同步時T_CHENJCH_RISK表存在大量的delete/update/insert操作,上次收集統計信息時正好這個表里沒有數據,但是經過幾天的數據同步后,表里的數據量發生了很大變化,統計信息也不是實時進行收集,最終導致生成較差的執行計劃;

解決方案:

嘗試刪除T_CHENJCH_RISK表統計信息,讓數據庫通過動態取樣實時的收據信息,但是執行計劃沒有變,還是走全表掃描,速度沒有提高;

begin

  dbms_stats.delete_table_stats(ownname => 'CHENJCH', tabname => 'T_CHENJCH_RISK');

end;

嘗試重新收集T_CHENJCH_RISK表統計信息,讓數據庫通過動態取樣實時的收據信息,但是執行計劃沒有變,還是走全表掃描,速度沒有提高;

begin

  DBMS_STATS.GATHER_TABLE_STATS('CHENJCH',

                                'T_CHENJCH_RISK',

                                estimate_percent => 100,

                                method_opt       => 'FOR ALL INDEXED COLUMNS',

                                degree           => 6,

                                CASCADE          => TRUE);

end;

為什么執行計劃沒有變?

(數據庫版本Oracle 12.2.0.1.0)

因為SQL語句存在綁定變量,SQL文本沒有變,導致執行計劃也沒有發生變化;

通過對表T_CHENJCH_RISK添加和刪除注釋,可以讓數據庫重新生成執行計劃;

comment on column CHENJCH.T_CHENJCH_RISK.RISK_ID   is  'PK_T_CHENJCH_RISK';

comment on column CHENJCH.T_CHENJCH_RISK.RISK_ID   is  '';

查看新生成的執行計劃,T_CHENJCH_RISK已經開始走主鍵索引了,速度有明顯提升;

以上是“Oracle如何通過注釋改變執行計劃”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女