iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >oracle查看执行计划之DBMS_XPLAN
  • 404
分享到

oracle查看执行计划之DBMS_XPLAN

2024-04-02 19:04:59 404人浏览 独家记忆
摘要

    使用DBMS_XPLAN包中的方法是在oracle数据库中得到目标sql的执行计划的另一种方法。针对不同的应用场景吗,你可以选择如下四种方法中的一种:  &n

    使用DBMS_XPLAN包中的方法是在oracle数据库中得到目标sql的执行计划的另一种方法。针对不同的应用场景吗,你可以选择如下四种方法中的一种:

    select * from table(dbms_xplan.display)

    select * from table(dbms_xplan.display_cursor(null,null,'advenced'));

    select * from table(dbms_xplan.display_cursor('sql_id/hash_value',child_cursor_number,'advanced'));

    select * from table(dbms_xplan.display_awr('sql_id'));

    方法1是执行select * from table(dbms_xplan.display),这需要与explain plan命令配合使用,它用于查看使用explain plan命令后得到的执行计划。

     方法2是执行select * from table(dbms_xplan.display_cursor(null,null,'advenced'));它用于查看刚刚执行过的sql的执行计划,这里针对dbms_xplan.display_cursor所传入的第一个和第二参数的值均为null,第三参数的值是“advanced”,第三个输入参数的值也可以是“all”,只不过用“advanced”后的显示结果会比用“all”的显示结果更详细些。    

SQL> conn scott/scott;

Connected.

SQL> set linesize 800

SQL> set pagesize 900

SQL> col plan_table_output for a200

SQL> select empno,ename,dname from emp,dept where emp.deptno=dept.deptno;

     EMPNO ENAME      DNAME

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

      7782 CLARK      ACCOUNTING

      7839 KING       ACCOUNTING14 rows selected.

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

PLAN_TABLE_OUTPUT

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

SQL_ID 7ww0fhpbqQt0n, child number 0

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

select empno,ename,dname from emp,dept where emp.deptno=dept.deptno

Plan hash value: 844388907

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

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

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

|   0 | SELECT STATEMENT     |       |       |       |     6 (100)|       |

|   1 |  MERGE JOIN     |       |    14 |   364 |     6 (17)| 00:00:01 |

|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     4 |    52 |     2 (0)| 00:00:01 |

|   3 |    INDEX FULL SCAN     | PK_DEPT |     4 |       |     1 (0)| 00:00:01 |

|*  4 |   SORT JOIN     |       |    14 |   182 |     4 (25)| 00:00:01 |

|   5 |    TABLE ACCESS FULL     | EMP     |    14 |   182 |     3 (0)| 00:00:01 |

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

Query Block Name / Object Alias (identified by operation id):

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

   1 - SEL$1

   2 - SEL$1 / DEPT@SEL$1

   3 - SEL$1 / DEPT@SEL$1

   5 - SEL$1 / EMP@SEL$1

Outline Data

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

 

Predicate InfORMation (identified by operation id):

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

   4 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")

       filter("EMP"."DEPTNO"="DEPT"."DEPTNO")

Column Projection Information (identified by operation id):

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

   1 - "DNAME"[VARCHAR2,14], "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10]

   2 - "DEPT"."DEPTNO"[NUMBER,22], "DNAME"[VARCHAR2,14]

   3 - "DEPT".ROWID[ROWID,10], "DEPT"."DEPTNO"[NUMBER,22]

   4 - (#keys=1) "EMP"."DEPTNO"[NUMBER,22], "EMPNO"[NUMBER,22],

       "ENAME"[VARCHAR2,10]

   5 - "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10], "EMP"."DEPTNO"[NUMBER,22]

58 rows selected.

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

PLAN_TABLE_OUTPUT

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

SQL_ID 7ww0fhpbqqt0n, child number 0

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

select empno,ename,dname from emp,dept where emp.deptno=dept.deptno

Plan hash value: 844388907

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

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

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

|   0 | SELECT STATEMENT     |       |       |       |     6 (100)|       |

|   1 |  MERGE JOIN     |       |    14 |   364 |     6 (17)| 00:00:01 |

|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     4 |    52 |     2 (0)| 00:00:01 |

|   3 |    INDEX FULL SCAN     | PK_DEPT |     4 |       |     1 (0)| 00:00:01 |

|*  4 |   SORT JOIN     |       |    14 |   182 |     4 (25)| 00:00:01 |

|   5 |    TABLE ACCESS FULL     | EMP     |    14 |   182 |     3 (0)| 00:00:01 |

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

Query Block Name / Object Alias (identified by operation id):

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

   1 - SEL$1

   2 - SEL$1 / DEPT@SEL$1

   3 - SEL$1 / DEPT@SEL$1

   5 - SEL$1 / EMP@SEL$1

Predicate Information (identified by operation id):

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

   4 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")

       filter("EMP"."DEPTNO"="DEPT"."DEPTNO")

Column Projection Information (identified by operation id):

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

   1 - "DNAME"[VARCHAR2,14], "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10]

   2 - "DEPT"."DEPTNO"[NUMBER,22], "DNAME"[VARCHAR2,14]

   3 - "DEPT".ROWID[ROWID,10], "DEPT"."DEPTNO"[NUMBER,22]

   4 - (#keys=1) "EMP"."DEPTNO"[NUMBER,22], "EMPNO"[NUMBER,22],

       "ENAME"[VARCHAR2,10]

   5 - "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10], "EMP"."DEPTNO"[NUMBER,22]

41 rows selected.

当参数传入all,显示结果中了“Qutline Data”部分的内容:

    方法3是执行    select * from table(dbms_xplan.display_cursor('sql_id/hash_value',child_cursor_number,'advanced'));它用于查看指定sql的执行计划。这里针对方法dbms_xplan.display_cursor所传人的第一个参数的值是指定sql的sql_id或者sql hash value,第二参数的值是要看执行计划所在的child cursor number,第三个参数是advcanced或者all

    

SQL> select sql_text,sql_id,hash_value,child_number from v$sql where sql_text like 'select empno,ename,dname%';

SQL_TEXT

select empno,ename,dname from emp,dept where emp.deptno=dept.deptno

SQL_ID      HASH_VALUE CHILD_NUMBER

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

7ww0fhpbqqt0n 1466655764    0

    只要目标sql的执行计划所在的child cursor还没有被page out出shared pool,就可以使用方法3查看该sql的执行计划:   

SQL> select * from table(dbms_xplan.display_cursor('2qm0f3qgsqqyc',0,'advanced'));

PLAN_TABLE_OUTPUT

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

SQL_ID 2qm0f3qgsqqyc, child number 0

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

select empno,ename,dname from scott.emp,scott.dept where

scott.emp.deptno=scott.dept.deptno

Plan hash value: 844388907

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

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

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

|   0 | SELECT STATEMENT     |       |       |       |     6 (100)|       |

|   1 |  MERGE JOIN     |       |    14 |   364 |     6 (17)| 00:00:01 |

|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     4 |    52 |     2 (0)| 00:00:01 |

|   3 |    INDEX FULL SCAN     | PK_DEPT |     4 |       |     1 (0)| 00:00:01 |

|*  4 |   SORT JOIN     |       |    14 |   182 |     4 (25)| 00:00:01 |

|   5 |    TABLE ACCESS FULL     | EMP     |    14 |   182 |     3 (0)| 00:00:01 |

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

Query Block Name / Object Alias (identified by operation id):

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

   1 - SEL$1

   2 - SEL$1 / DEPT@SEL$1

   3 - SEL$1 / DEPT@SEL$1

   5 - SEL$1 / EMP@SEL$1

Outline Data

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

 

Predicate Information (identified by operation id):

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

   4 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")

       filter("EMP"."DEPTNO"="DEPT"."DEPTNO")

Column Projection Information (identified by operation id):

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

   1 - "DNAME"[VARCHAR2,14], "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10]

   2 - "DEPT"."DEPTNO"[NUMBER,22], "DNAME"[VARCHAR2,14]

   3 - "DEPT".ROWID[ROWID,10], "DEPT"."DEPTNO"[NUMBER,22]

   4 - (#keys=1) "EMP"."DEPTNO"[NUMBER,22], "EMPNO"[NUMBER,22],

       "ENAME"[VARCHAR2,10]

   5 - "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10], "EMP"."DEPTNO"[NUMBER,22]

59 rows selected.

    我们可以通过dbms_xplan.display_awr来得到该sql的所有历史执行计划:

SQL> set lines 100

SQL> select * from table(dbms_xplan.display_awr('cy097a90nu4fk'));

PLAN_TABLE_OUTPUT

SQL_ID cy097a90nu4fk

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

Plan hash value: 1999179007

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

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

Inst   |IN-OUT|

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

|   0 | SELECT STATEMENT                 |                |       |       |    11 (100)|          |

       |      |

|   1 |  HASH GROUP BY                   |                |     1 |   101 |    11  (19)| 00:00:01 |

       |      |

|   2 |   VIEW                           |                |     1 |   101 |    10  (10)| 00:00:01 |

       |      |

|   3 |    HASH GROUP BY                 |                |     1 |   261 |    10  (10)| 00:00:01 |

       |      |

|   4 |     FILTER                       |                |       |       |            |          |

       |      |

|   5 |      NESTED LOOPS                |                |       |       |            |          |

       |      |

|   6 |       NESTED LOOPS               |                |     1 |   261 |     9   (0)| 00:00:01 |

       |      |

|   7 |        REMOTE                    |                |     1 |   176 |     5   (0)| 00:00:01 |

DBLK_~ | R->S |

|   8 |        INDEX RANGE SCAN          | PRODUCTSPEC_PK |     1 |       |     1   (0)| 00:00:01 |

       |      |

|   9 |       TABLE ACCESS BY INDEX ROWID| PRODUCTSPEC    |     1 |    41 |     2   (0)| 00:00:01 |

       |      |

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

Remote SQL Information (identified by operation id):

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

   7 - SELECT "A1"."EVENTTIMEKEY","A1"."EVENTID","A1"."EVENTTIME","A1"."FOLLOTID","A1"."PRODUCTSPECI

D","A1"

       ."PROCESSFLOWID","A1"."OLDOPERATIONID","A1"."QUANTITY","A1"."EQUIPMENTID","A2"."PROCESSFLOWID

","A2"."REWORK

       TYPE" FROM "LOTHISTORY" "A1","PROCESSFLOW" "A2" WHERE "A2"."REWORKTYPE"='Normal' AND

       "A1"."PROCESSFLOWID"="A2"."PROCESSFLOWID" AND "A1"."EVENTID"='TrackIn' AND "A1"."OLDOPERATION

ID"='BFOP001'

       AND (SUBSTR("A1"."FOLLOTID",1,1)='V' OR SUBSTR("A1"."FOLLOTID",1,1)='P') AND

       "A1"."EVENTTIME">=TO_DATE('20140918080001','YYYY-MM-DD HH24:MI:SS') AND

       "A1"."EVENTTIME"<=TO_DATE('20140919080000','YYYY-MM-DD HH24:MI:SS') (accessing 'DBLK_RPT_EOL_

PRD' )

55 rows selected.

    不过此方法显示执行计划中看不到执行步骤对应的谓词条件。

您可能感兴趣的文档:

--结束END--

本文标题: oracle查看执行计划之DBMS_XPLAN

本文链接: https://www.lsjlt.com/news/49828.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle查看执行计划之DBMS_XPLAN
        使用DBMS_XPLAN包中的方法是在oracle数据库中得到目标SQL的执行计划的另一种方法。针对不同的应用场景吗,你可以选择如下四种方法中的一种:  &n...
    99+
    2024-04-02
  • 如何使用dbms_xplan查看执行计划
    小编给大家分享一下如何使用dbms_xplan查看执行计划,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!概述 dbms_xpl...
    99+
    2024-04-02
  • Oracle怎么查看执行计划
    在Oracle数据库中,可以使用以下两种方法来查看执行计划: 1、使用EXPLAIN PLAN语句:您可以在SQL查询前添加”EXP...
    99+
    2024-04-09
    Oracle
  • Oracle中如何查看执行计划
    这篇文章主要介绍了Oracle中如何查看执行计划,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法一、通过使用工具PLSQL Develop...
    99+
    2024-04-02
  • oracle中怎么查看执行计划
    在Oracle中查看执行计划可以通过以下两种方法: 1、使用EXPLAIN PLAN语句来生成执行计划: EXPLAIN PLAN ...
    99+
    2024-03-13
    oracle
  • Oracle 11g 查看执行计划10046事件
    使用10046事件查看真实的执行计划操作如下:SQL> conn / as sysdbaConnected.SQL> SQL> oradebug setmypid Stateme...
    99+
    2024-04-02
  • Oracle查询执行计划
    执行计划(Execution Plan)也叫查询计划(Query Plan),它是数据库执行SQL语句的具体步骤和过程。SQL查询语句的执行计划主要包括: ● 访问表的方式。数据库通过索引或全表扫描等方式访问表中的数据。...
    99+
    2023-04-03
    Oracle查询执行计划 Oracle执行计划查询
  • oracle怎么查看sql历史执行计划
    要查看SQL历史执行计划,可以使用以下方法: 使用Oracle的动态性能视图:通过查询v$sql_plan或v$sql_plan_...
    99+
    2024-04-09
    oracle sql
  • oracle中怎么查看sql执行计划的执行顺序
    这篇文章主要讲解了“oracle中怎么查看sql执行计划的执行顺序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle中怎么查看sql执行计划的执行顺...
    99+
    2024-04-02
  • 怎么查看mysql执行计划
    要查看MySQL执行计划,可以使用EXPLAIN关键字。在执行SQL语句之前,将其放在EXPLAIN关键字之前,然后执行该语句。例如...
    99+
    2024-04-09
    mysql
  • Mysql怎么查看执行计划
    这篇文章主要介绍“Mysql怎么查看执行计划”,在日常操作中,相信很多人在Mysql怎么查看执行计划问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql怎么查看执行计划”...
    99+
    2024-04-02
  • 使用autotrace查看执行计划
    set autotrace off 不产生autotrace报告,默认值 set autotrace on explain autotrace报告只展示最优的执行方式(optimizer exe...
    99+
    2024-04-02
  • 看懂Oracle中的执行计划
       从事Oracle相关的工作,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近学习关于Oracle中SQL语句的执行计划的相关内容。下面是文章的目录结构: ...
    99+
    2024-04-02
  • Oracle中怎么查看执行计划的命令
    今天就跟大家聊聊有关Oracle中怎么查看执行计划的命令,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在SQL*PLUS(PL/SQL的命令窗口和S...
    99+
    2024-04-02
  • oracle中查看执行计划的常用方法
    本篇内容介绍了“oracle中查看执行计划的常用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文介绍...
    99+
    2024-04-02
  • oracle怎么查看SQL执行计划的顺序
    本篇内容介绍了“oracle怎么查看SQL执行计划的顺序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!查看...
    99+
    2024-04-02
  • navicat执行计划的查看步骤
    这篇文章主要介绍了navicat执行计划的查看步骤,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。打开Navicat工具,连接到需要执行sql...
    99+
    2024-04-02
  • mysql怎么查看sql执行计划
    要查看MySQL中SQL语句的执行计划,可以使用EXPLAIN关键字来获取查询的执行计划。以下是使用EXPLAIN来查看SQL执行计...
    99+
    2024-04-15
    mysql
  • plsql的执行计划如何查看
    在PL/SQL中,可以使用以下方法来查看执行计划: 使用DBMS_XPLAN包:这是Oracle提供的一个包,可以用于显示SQL语...
    99+
    2024-04-09
    plsql
  • mysql中怎么查看执行计划
    这篇文章将为大家详细讲解有关mysql中怎么查看执行计划,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。explain执行计划包含的信息其中最重要的字段为:i...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作