oracle查看執行計劃的方法

查看執行計劃的方法

  1. Explain Plan For SQL
    不實際執行SQL語句,生成的計劃未必是真實執行的計劃
    必需要有plan_tablehtml

  2. SQLPLUS AUTOTRACE
    除set autotrace traceonly explain外均實際執行SQL,但仍未必是真實計劃
    必需要有plan_tablesql

  3. SQL TRACE
    須要啓用10046戒者SQL_TRACE
    通常用tkprof看的更清楚些,固然10046裏自己也有執行計劃信息緩存

  4. V$SQL和V$SQL_PLAN
    能夠查詢到多個子遊標的計劃信息了,可是看起來比較費勁session

  5. Enterprise Manager
    能夠圖形化顯示執行計劃,但並不是全部環境有EM可用oracle

  6. 其餘第三方工具
    注意 PL/SQL developer之類工具F5看到的執行計劃未必是真實的app

推薦的方法 DBMS_XPLAN

select * from table(dbms_xplan….);工具

dbms_xplan.display()this

數據來源是Plan Tablecode

dbms_xplan.display_cursororm

數據來源是Shared pool中的遊標緩存

FUNCTION DISPLAY_CURSOR RETURNS DBMS_XPLAN_TYPE_TABLE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SQL_ID                         VARCHAR2                IN     DEFAULT
 CURSOR_CHILD_NO                NUMBER(38)              IN     DEFAULT
 FORMAT                         VARCHAR2                IN     DEFAULT

推薦的使用參數爲:

select * from table(dbms_xplan.display_cursor('sqlId',null,'ADVANCED  ALLSTATS LAST PEEKED_BINDS'));

若是sqlId爲NULL,則顯示當前session的執行計劃。

select * from table(dbms_xplan.display_cursor(null,null,'ADVANCED  ALLSTATS LAST PEEKED_BINDS'));

其中format的解釋以下:

IOSTATS: Assuming that basic plan statistics are
  ---                 collected when SQL statements are executed (either by
  ---                 using the gather_plan_statistics hint or by setting the
  ---                 parameter statistics_level to ALL), this format will show
  ---                 IO statistics for all (or only for the last as shown below)
  ---                 executions of the cursor.
  ---
  ---        MEMSTATS: Assuming that PGA memory management is enabled (i.e
  ---                  pga_aggregate_target parameter is set to a non 0 value),
  ---                  this format allows to display memory management
  ---                  statistics (e.g. execution mode of the operator, how
  ---                  much memory was used, number of bytes spilled to
  ---                  disk, ...). These statistics only apply to memory
  ---                  intensive operations like hash-joins, sort or some bitmap
  ---                  operators.
  ---
  ---        ROWSTATS: Assuming that basic plan statistics are
  ---                  collected when SQL statements are executed (either by
  ---                  using the gather_plan_statistics hint or by setting the
  ---                  parameter statistics_level to ALL), this format will show
  ---                  row count statistics for all (or only for the last as
  ---                  shown below) executions of the cursor.
  ---
  ---        ALLSTATS: A shortcut for 'IOSTATS MEMSTATS ROWSTATS'
  ---
  ---        LAST: By default, plan statistics are shown for all executions of
  ---              the cursor. The keyword LAST can be specified to see only
  ---              the statistics for the last execution.
  ---
  ---        PEEKED_BINDS:顯示解析時使用的綁定變量。

dbms_xplan.display_awr

數據來源是AWR倉庫基表WRH$_SQL_PLAN

FUNCTION DISPLAY_AWR RETURNS DBMS_XPLAN_TYPE_TABLE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SQL_ID                         VARCHAR2                IN
 PLAN_HASH_VALUE                NUMBER(38)              IN     DEFAULT
 DB_ID                          NUMBER(38)              IN     DEFAULT
 FORMAT                         VARCHAR2                IN     DEFAULT
 CON_ID                         NUMBER(38)              IN     DEFAULT

dbms_xplan.display_sqlset

數據來源是SQL Set視圖


以上內容主要整理自maclean的oracle執行計劃教學視頻和ppt: www.askmaclean.com/archives/read-sql-execution-plan.html

相關文章
相關標籤/搜索