91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Oracle中如何查看執行計劃

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

這篇文章主要介紹了Oracle中如何查看執行計劃,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

方法一、通過使用工具PLSQL Developer中的Explain Plan Window窗口查看SQL執行計劃。具體參考

             https://www.cnblogs.com/Dreamer-1/p/6076440.html

方法二、通過SQL*PLUS中的autotrace命令查看

            1.登錄擁有dba權限的用戶,分別執行

               腳本 ${ORACLE_HOME}/RDBMS/ADMIN/utlxplan.sql和

               腳本 ${ORACLE_HOME}/sqlplus/admin/plustrce.sql

               然后通過SQL*PLUS就可以查看執行計劃了

            2.查看執行計劃有下面四種選項

                1> set autotrace on    --(得到執行計劃,并輸出結果)

                2> set autotrace traceonly    --(得到執行計劃,但不輸出結果)

                3> set autotrace traceonly explain    --(得到執行計劃,不輸出統計信息和結果,僅展現執行計劃部分)

                4> set autotrace traceonly statistics    --(不輸出執行計劃和結果,僅展現統計信息)

            3.優缺點

                優點:

                    1> 可以輸出運行時的相關統計信息(產生多少邏輯讀,多少遞歸調用,多少次物理讀的情況)

                    2> 雖然必須要等語句執行完畢后才可以執行計劃,但是可以有traceonly開關來控制返回結果不打屏輸出

                缺點:

                    1> 必須等語句執行完畢后,才可以出結果

                    2> 無法看到表被訪問了多少次

方法三、explain plan for獲取

            1.執行步驟如下:

                SQL> set linesize 200;

                SQL> set pagesize 2000;

                SQL> explain plan for select * from emp;

                Explained

                SQL> select * from table(dbms_xplan.display());

                PLAN_TABLE_OUTPUT

                --------------------------------------------------------------------------------

                Plan hash value: 3956160932

                --------------------------------------------------------------------------

                | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |

                --------------------------------------------------------------------------

                |   0 | SELECT STATEMENT  |      |    14 |   532 |     3   (0)| 00:00:01 |

                |   1 |  TABLE ACCESS FULL| EMP  |    14 |   532 |     3   (0)| 00:00:01 |

                --------------------------------------------------------------------------

                8 rows selected

            2.優缺點

                優點:

                    1> 無需真正執行,快捷方便

                缺點:

                    1> 沒有輸出相關的統計信息(產生多少次邏輯讀,多少次物理讀,多少次遞歸調用)

                    2> 無法判斷處理了多少行

                    3> 無法判斷表被訪問了多少次

方法四、statistics_level = all 或者 /*+ gather_plan_statistics */

            1.執行步驟

                1> 通過statistics_level = all

                    SQL> set linesize 500;

                    SQL> set pagesize 1000;

                    SQL> alter session set statistics_level = all;

                    會話已更改。

                    SQL> select count(*) from emp;

                      COUNT(*)

                    ----------

                            14

                    SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

                    PLAN_TABLE_OUTPUT

                    ------------------------------------------------------------------------------------------------

                    SQL_ID  g59vz2u4cu404, child number 0

                    -------------------------------------

                    select count(*) from emp

                    Plan hash value: 2937609675

                    -------------------------------------------------------------------------------------

                    | Id  | Operation        | Name   | Starts | E-Rows | A-Rows |   A-Time   | Buffers |

                    -------------------------------------------------------------------------------------

                    |   0 | SELECT STATEMENT |        |      1 |        |      1 |00:00:00.01 |       1 |

                    |   1 |  SORT AGGREGATE  |        |      1 |      1 |      1 |00:00:00.01 |       1 |

                    |   2 |   INDEX FULL SCAN| PK_EMP |      1 |     14 |     14 |00:00:00.01 |       1 |

                    -------------------------------------------------------------------------------------

                    已選擇14行。

                2> 通過 /*+ gather_plan_statistics*/

                    SQL> set linesize 200;

                    SQL> set pagesize 500;

                    SQL> select /*+gather_plan_statistics*/ count(*) from emp;

                      COUNT(*)

                    ----------

                            14

                    SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

                    PLAN_TABLE_OUTPUT

                    -------------------------------------

                    SQL_ID  537ffv2mq5375, child number 0

                    -------------------------------------

                    select /*+gather_plan_statistics*/ count(*) from emp

                    Plan hash value: 2937609675

                    -------------------------------------------------------------------------------------

                    | Id  | Operation        | Name   | Starts | E-Rows | A-Rows |   A-Time   | Buffers |

                    -------------------------------------------------------------------------------------

                    |   0 | SELECT STATEMENT |        |      1 |        |      1 |00:00:00.01 |       1 |

                    |   1 |  SORT AGGREGATE  |        |      1 |      1 |      1 |00:00:00.01 |       1 |

                    |   2 |   INDEX FULL SCAN| PK_EMP |      1 |     14 |     14 |00:00:00.01 |       1 |

                    -------------------------------------------------------------------------------------

                    已選擇14行。

            2.關鍵字解讀

                1> Starts:該SQL執行的次數

                2> E-Rows:執行計劃預計的行數。

                3> A-Rows:實際返回的行數。A-Rows跟E-Rows做比較,就可以確定哪一步執行計劃出了問題。

                4> A-Time:每一步實際執執行的時間(HH : MM :SS.FF),根據這一行可以知道該SQL耗時在了哪個地方

                5> Buffers:每一步執行的邏輯讀或一致性讀

            3.優缺點

                優點

                    1> 可以清晰的從Starts得出表被訪問多少

                    2> 可以清晰的從E-Rows和A-Rows中得到預測的行數和真實的行數,從而可以準確判斷Oracle評估是否正確

                    3> 雖然沒有專門的輸出運行時的相關統計信息,但是執行計劃中的buffers就是真實的邏輯讀的多少

                缺點

                    1> 必須等語句真正執行完畢后,才可以得出結果

                    2> 無法控制記錄輸屏打出,不像autotace由traceonly可以不將結果打屏輸出

                    3> 看不出遞歸調用次數,看不出物理讀的多少(不過邏輯讀才是重點)

方法五、通過dbms_xplan.display_cursor(&sql_id)輸入sql_id參數獲取

            1.執行步驟

                SQL> select sql_id from sys.v_$sql t where t.sql_text like '%select count(*) from emp';

                SQL_ID

                -------------

                g59vz2u4cu404

                SQL> select * from table(dbms_xplan.display_cursor('g59vz2u4cu404'));

                PLAN_TABLE_OUTPUT  

                --------------------------------------------------------------------------------------------

                SQL_ID  g59vz2u4cu404, child number 0

                -------------------------------------

                select count(*) from emp

                

                Plan hash value: 2937609675

                

                -------------------------------------------------------------------

                | Id  | Operation        | Name   | Rows  | Cost (%CPU)| Time     |

                -------------------------------------------------------------------

                |   0 | SELECT STATEMENT |        |       |     1 (100)|          |

                |   1 |  SORT AGGREGATE  |        |     1 |            |          |

                |   2 |   INDEX FULL SCAN| PK_EMP |    14 |     1   (0)| 00:00:01 |

                -------------------------------------------------------------------

                已選擇14行。

            2.優缺點

                優點:

                    1> 知道sql_id立即可得到執行計劃,和explain plan for一樣無需執行

                    2> 可以得到真實的執行計劃

                缺點:

                    1> 沒有輸出運行的相關統計信息(產生的物理讀,邏輯讀,遞歸調用次數)

                    2> 無法判斷處理了多少行

                    3> 無法判斷表被訪問了多少次

方法六、10046 trace跟蹤

            1.執行步驟 

                Step1:alter session setevents '10046 trace name context forever,level 12'; (開啟跟蹤)

                Step2:執行sql

                Step3:alter session setevents '10046 trace name context off';   (關閉跟蹤)

                Step4:步驟4:找到跟蹤后產生的文件

                Step5:tkprof  trc文件  目標文件 sys=no sort=prsela,exeela,fchela  (格式化命令)

                SQL> set autot off

                SQL> alter session set statistics_level=typical;

                Session altered.

                SQL> alter session set events '10046 trace name context forever,level 12';

                Session altered.

                SQL> select count(*) from test;

                  COUNT(*) 

                ----------

                         7

                SQL> alter session set events '10046 trace name context off';

                Session altered.

                SQL> select d.value

                

                  2  || '/'

                

                  3  || LOWER (RTRIM(i.INSTANCE, CHR(0)))

                

                  4  || '_ora_'

                

                  5  || p.spid

                

                  6  || '.trc' trace_file_name

                

                  7  from (select p.spid

                

                  8        from v$mystat m,v$session s, v$process p

                

                  9        where  m.statistic#=1 and s.sid=m.sid and p.addr=s.paddr) p,

                

                 10        (select t.INSTANCE

                

                 11         FROM v$thread t,v$parameter v

                

                 12         WHERE v.name='thread'

                

                 13         AND(v.VALUE=0 OR t.thread#=to_number(v.value))) i,

                

                 14         (select value

                

                 15         from v$parameter

                

                 16         where name='user_dump_dest') d;

                TRACE_FILE_NAME

                -------------------------------------------------------------------

                

                /u01/app/oracle/diag/rdbms/ora12c/ora12c/trace/ora12c_ora_12195.trc

                SQL> host

                [oracle@ora12c ~]$ tkprof /u01/app/oracle/diag/rdbms/ora12c/ora12c/trace/ora12c_ora_12195.trc /home/oracle/10046.txt sys=no sort=prsela,exeela,fchela

                TKPROF: Release 12.1.0.1.0 - Development on Fri Jan 20 08:22:25 2017

                Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.

                SQL ID: 7b2twsn8vgfsc Plan Hash: 784602781

                select count(*)   from test

                call     count       cpu    elapsed       disk      query    current        rows

                

                ------- ------  -------- ---------- ---------- ---------- ----------  ----------

                

                Parse        1      0.00       0.00          3          3          2           0

                

                Execute      1      0.00       0.00          0          0          0           0

                

                Fetch        2      0.00       0.00          4         66          0           1

                

                ------- ------  -------- ---------- ---------- ---------- ----------  ----------

                

                total        4      0.00       0.00          7         69          2           1

                Misses in library cache during parse: 1

                

                Optimizer mode: ALL_ROWS

                

                Parsing user id: 103  

                

                Number of plan statistics captured: 1

                Rows (1st) Rows (avg) Rows (max)  Row Source Operation

                

                ---------- ---------- ----------  ---------------------------------------------------

                

                         1          1          1  SORT AGGREGATE (cr=66 pr=4 pw=0 time=298 us)

                

                         7          7          7   PARTITION RANGE ALL PARTITION: 1 3 (cr=66 pr=4 pw=0 time=397 us cost=39 size=0 card=11)

                

                         7          7          7    TABLE ACCESS FULL TEST PARTITION: 1 3 (cr=66 pr=4 pw=0 time=290 us cost=39 size=0 card=11)

                Elapsed times include waiting on following events:

                

                  Event waited on                             Times   Max. Wait  Total Waited

                

                  ----------------------------------------   Waited  ----------  ------------

                

                  db file sequential read                         4        0.00          0.00

                

                  SQL*Net message to client                       2        0.00          0.00

                

                  db file scattered read                          1        0.00          0.00

                

                  SQL*Net message from client                     2        7.03          7.03

            2.優缺點

                優點:

                    1> 可以看出SQL語句對應的等待事件

                    2> 如果SQL語句中有函數,SQL中有SQL,將會都被列出,無處遁形

                    3> 可以方便的看出處理的行數,邏輯物理讀

                    4> 可以跟蹤整個程序包

                缺點:    

                    1> 步驟繁瑣,比較麻煩

                    2> 無法判斷表被訪問了多少次

                    3> 執行計劃中的謂詞部分不能清晰的展現出來

方法七、awrsqlrpt.sql

            1.執行步驟  

               Step1:@?/rdbms/admin/awrsqrpt.sql

                Step2:選擇你要的斷點(begin snap 和end snap)

                Step3:輸入sql_id

適用場合分析

    1.如果某SQL執行非常長時間才會出結果,甚至慢到返回不了結果,這時候看執行計劃就只能用方法explain plan for;

    2.跟蹤某條SQL最簡單的方法是方法explain plan for ,其次就是方法autotrace;

    3.如果想觀察到某條SQL有多條執行計劃的情況,只能用方法dbms_xplan.display_cursor(sql_id)和方法awrsqlrpt.sql;

    4.如果SQL中含有多函數,函數中套有SQL等多層遞歸調用,想準確分析,只能使用方法10046 trace;

    5.要想確保看到真實的執行計劃,不能用方法plsql developer和方法explain plan for;

    6.要想獲取表被訪問的次數,只能使用方法statistics_level(/*+ gather_plan_statistics */);

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Oracle中如何查看執行計劃”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

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

AI

昌黎县| 西藏| 婺源县| 青州市| 甘孜| 唐海县| 鲁甸县| 岗巴县| 巨野县| 邵武市| 凌海市| 云林县| 中牟县| 庆城县| 新余市| 阜康市| 福清市| 青海省| 肥东县| 天门市| 澄迈县| 德安县| 三门县| 德兴市| 旌德县| 三明市| 巴林左旗| 连平县| 宜丰县| 原阳县| 遂溪县| 沅陵县| 英吉沙县| 商南县| 嘉鱼县| 高密市| 曲周县| 盈江县| 宿州市| 华坪县| 视频|