关于oracle执行计划的概念,参考之前的博客:http://blog.csdn.net/cymm_liu/article/details/7996599

如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题。 如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本可以断定是执行计划出了问题。

看懂执行计划也就成了SQL优化的先决条件。 这里的SQL优化指的是SQL性能问题的定位,定位后就可以解决问题。

一.查看执行计划的5种方法

1.1设置autotrace

序号

命令

解释

1

SET AUTOTRACE OFF

此为默认值,即关闭Autotrace

2

SET AUTOTRACE ON EXPLAIN

只显示执行计划

3

SET AUTOTRACE ON STATISTICS

只显示执行的统计信息

4

SET AUTOTRACE ON

包含2,3两项内容

5

SET AUTOTRACE TRACEONLY

与ON相似,但不显示语句的执行结果

SQL> set autotrace on

SQL> SET AUTOTRACE TRACEONLY;

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

14 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 844388907--------------------------------------------------------------------------------| Id  | Operation    | Name    | Rows  | Bytes | Cost (%CPU)| Time     |--------------------------------------------------------------------------------|   0 | SELECT STATEMENT    |      |    14 |   364 |     6(17)| 00:00:01 ||   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 |--------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------4 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")filter("EMP"."DEPTNO"="DEPT"."DEPTNO")Statistics----------------------------------------------------------0  recursive calls0  db block gets10  consistent gets0  physical reads0  redo size941  bytes sent via SQL*Net to client523  bytes received via SQL*Net from client2  SQL*Net roundtrips to/from client1  sorts (memory)0  sorts (disk)14  rows processed

1.2使用SQL

SQL>EXPLAIN PLAN FOR sql语句;

SQL>SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));

示例:

SQL> EXPLAIN PLAN FOR SELECT * FROM dual;

已解释。

SQL>SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));

或者:

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

1.3 oradebug

SQL> oradebug setmypid;
Statement processed.
SQL> oradebug event 10046 trace name context forever,level 12;——打开10046
Statement processed.
SQL> select empno,ename,dname from scott.emp,scott.dept where emp.deptno=dept.deptno;——执行想看计划的语句

EMPNO ENAME      DNAME
---------- ---------- --------------
7782 CLARK      ACCOUNTING
7839 KING       ACCOUNTING
7934 MILLER     ACCOUNTING
7566 JONES      RESEARCH
7902 FORD       RESEARCH
7876 ADAMS      RESEARCH
7369 SMITH      RESEARCH
7788 SCOTT      RESEARCH
7521 WARD       SALES
7844 TURNER     SALES
7499 ALLEN      SALES

EMPNO ENAME      DNAME
---------- ---------- --------------
7900 JAMES      SALES
7698 BLAKE      SALES
7654 MARTIN     SALES

14 rows selected.

SQL> oradebug tracefile_name;——查看跟踪文件名字
/u01/app/oracle/diag/rdbms/test/test/trace/test_ora_17425.trc
SQL> oradebug event 10046 trace name context off; ——关闭跟踪事件
Statement processed.

现在,根据查询出的跟踪文件名字,去查看执行计划:

需要对trace文件进行格式化,方便我们查看,使用tkprof:

[oracle@lyg ~]$ tkprof/u01/app/oracle/diag/rdbms/test/test/trace/test_ora_17425.trc output= ./exptest/test_ora_17425.trc

TKPROF: Release 11.2.0.3.0 - Development on Wed Mar 26 11:27:52 2014

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

[oracle@lyg ~]$ cd exptest/
[oracle@lyg exptest]$ ls
compressfile  expfull.log  exptest.sh  pxe.sh  test.dmp.gztest_ora_17425.trc
[oracle@lyg exptest]$ vi test_ora_17425.trc   (附上全部内容)

TKPROF: Release 11.2.0.3.0 - Development on Wed Mar 26 11:27:52 2014

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

Trace file: /u01/app/oracle/diag/rdbms/test/test/trace/test_ora_17425.trc
Sort options: default

********************************************************************************
count    = number of times OCI procedure was executed
cpu      = cpu time in seconds executing 
elapsed  = elapsed time in seconds executing
disk     = number of physical reads of buffers from disk
query    = number of buffers gotten for consistent read
current  = number of buffers gotten in current mode (usually for update)
rows     = number of rows processed by the fetch or execute call

********************************************************************************

SQL ID: 3yfu3wh150aqt Plan Hash: 844388907

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

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.01          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.00       0.00          0         10          0          14
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.01       0.01          0         10          0          14

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYS
Number of plan statistics captured: 1

Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
        14         14         14  MERGE JOIN  (cr=10 pr=0 pw=0 time=520 us cost=6 size=364 card=14)
         4          4          4   TABLE ACCESS BY INDEX ROWID DEPT (cr=4 pr=0 pw=0 time=329 us cost=2 size=52 card=4)
         4          4          4    INDEX FULL SCAN PK_DEPT (cr=2 pr=0 pw=0 time=173 us cost=1 size=0 card=4)(object id 75334)
        14         14         14   SORT JOIN (cr=6 pr=0 pw=0 time=242 us cost=4 size=182 card=14)
        14         14         14    TABLE ACCESS FULL EMP (cr=6 pr=0 pw=0 time=170 us cost=3 size=182 card=14)

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       2        0.00          0.00
  SQL*Net message from client                     2       11.50         11.50

********************************************************************************

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.01          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.00       0.00          0         10          0          14
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.01       0.01          0         10          0          14

Misses in library cache during parse: 1

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       4        0.00          0.00
  SQL*Net message from client                     4       12.79         33.45

OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        0      0.00       0.00          0          0          0           0
Execute      0      0.00       0.00          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        0      0.00       0.00          0          0          0           0

Misses in library cache during parse: 0

1  user  SQL statements in session.
    0  internal SQL statements in session.
    1  SQL statements in session.
********************************************************************************
Trace file: /u01/app/oracle/diag/rdbms/test/test/trace/test_ora_17425.trc
Trace file compatibility: 11.1.0.7
Sort options: default

1  session in tracefile.
       1  user  SQL statements in trace file.
       0  internal SQL statements in trace file.
       1  SQL statements in trace file.
       1  unique SQL statements in trace file.
      86  lines in trace file.
       0  elapsed seconds in trace file.

1.4通过hash_value,child_number查看执行过的sql语句的执行计划

SQL> col sql_text format a30;
SQL> select sql_text,sql_id,hash_value,child_number from v$sql where sql_text like '%select empno,ename,dname from scott.emp,scott.dept where emp.deptno=dept.deptno%';

SQL_TEXTSQL_IDHASH_VALUE    CHILD_NUMBER
------------------------------                        -------------            ----------            ------------
select empno,ename,dname from  088zzpvnu02r4 39195798760
scott.emp,scott.dept where emp
.deptno=dept.deptno

select empno,ename,dname from  3yfu3wh150aqt   388082810
scott.emp,scott.dept where emp
.deptno=dept.deptno

select empno,ename,dname from  3yfu3wh150aqt   388082811
scott.emp,scott.dept where emp
.deptno=dept.deptno

3 rows selected.

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

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
HASH_VALUE  3919579876, child number 0
--------------------------------------
select empno,ename,dname from scott.emp,scott.dept where
emp.deptno=dept.deptno

Plan hash value: 844388907

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

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

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

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

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

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|   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 |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

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

1 - SEL$1
   2 - SEL$1 / DEPT@SEL$1
   3 - SEL$1 / DEPT@SEL$1

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
   5 - SEL$1 / EMP@SEL$1

Outline Data
-------------

/*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('11.2.0.3')
      DB_VERSION('11.2.0.3')
      ALL_ROWS

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
      OUTLINE_LEAF(@"SEL$1")
      INDEX(@"SEL$1" "DEPT"@"SEL$1" ("DEPT"."DEPTNO"))
      FULL(@"SEL$1" "EMP"@"SEL$1")
      LEADING(@"SEL$1" "DEPT"@"SEL$1" "EMP"@"SEL$1")
      USE_MERGE(@"SEL$1" "EMP"@"SEL$1")
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
   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]

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

59 rows selected.

SQL>

1.5使用Toad,PL/SQL Developer工具

图片是Toad工具查看的执行计划。 在Toad 里面,很清楚的显示了执行的顺序。 但是如果在SQLPLUS里面就不是那么直接。 但我们也可以判断一般按缩进长度来判断,缩进最大的最先执行,如果有2行缩进一样,那么就先执行上面的。

查看oracle执行计划方法( 一)相关推荐

  1. 查看oracle执行计划

    日常开发活动中,有时候需要对oracle执行计划进行监控,以此来调优程序和数据库方面的性能. 常用方法有以下几种: 一.通过PL/SQL Dev工具 1.直接File->New->Expl ...

  2. oracle执行计划耗费 基数 字节,Oracle 查看执行计划

    一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 这里以PLSQL为例: ①:配置执行计划需要显示的项: 工具  ...

  3. Oracle 查看 SQL执行计划

    Oracle 查看 SQL执行计划 SQL性能分析 执行计划可以用来分析SQL的性能 一.查看执行计划的方法 1. 设置autotrace set autotrace off: 此为默认值,即关闭au ...

  4. 看懂Oracle执行计划(转载)

    转载自 写的很好,屯一波 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Or ...

  5. Oracle调优之看懂Oracle执行计划

    1.文章写作前言简介 之前曾经拜读过<收获,不止sql调优>一书,此书是国内DBA写的一本很不错的调优类型的书,是一些很不错的调优经验的分享.虽然读了一遍,做了下读书笔记,觉得很有所收获, ...

  6. Oracle总结(一):Oracle执行计划

    看懂Oracle执行计划 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 1.什么是Oracle执行计划? 执行计划是一条查询语句在Or ...

  7. oracle用plsql trance,Oracle执行计划总结

    一.ORACLE中常见执行计划 表访问的执行计划 1.table access full:全表扫描.它会访问表中的每一条记录. 2.table access by user rowid:输入源rowi ...

  8. oracle 执行计划 ppt,oracle查看执行计划的方法

    查看执行计划的方法 Explain Plan For SQL 不实际执行SQL语句,生成的计划未必是真实执行的计划 必须要有plan_table SQLPLUS AUTOTRACE 除set auto ...

  9. Oracle查看SQL执行计划的方式

    Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: 1.通过sq ...

最新文章

  1. iPhone音频播放后台控制
  2. android sqlite查询某个字段,Android的sqlite:如何检索特定列的特定数据?
  3. rust火箭基地主楼开启方法_Rust 为什么能成为 Stack Overflow 最受欢迎的语言?
  4. C++语言基础 —— STL —— 容器与迭代器 —— pair
  5. 前端使用工具sublime text 3下载
  6. ubuntu 的使用
  7. python列表元组字典集合实验心得_python心得 元组,字典,集合
  8. java ojdbc7_ojdbc7 / ojdbc8中的charset问题与ojdbc6
  9. axure 彻底删除lib_axure-rplib
  10. npy文件的保存与读取
  11. xx大学云数据中心建设方案
  12. 自定义SeekBar 带文字
  13. java蘑菇岛种子_我的世界:以2002年2月12日为种子代码,居然是蘑菇岛神级种子!...
  14. 2019年淘客怎么做推广之大淘客都必须知道的联盟发展方向和玩法
  15. CList POSITION
  16. 散列函数设计:除留余数法
  17. 【已解决】IE无法上网、有道云PC客户端无连接
  18. PCL点云处理_安装及环境配置(1)
  19. 杰理AP之PO声处理【篇】
  20. 基于bayes分类器的文本分类

热门文章

  1. 【行人轨迹预测数据集——ETH、UCY】
  2. 安卓uc斗鱼html5,斗鱼HTML5播放器
  3. unity新动画系统之动画层和动画遮罩
  4. 祭奠被消亡的CSDN文章
  5. vue各类轮播图大全
  6. 【小黑屋】——总结反馈
  7. python如何画3个相切的圆_使用python绘制4个相切的圆形
  8. 弱爆了的鹊桥专用查询接口:taobao.tbk.dg.item.coupon.get( 好券清单API【导购】)接口
  9. 道闸雷达感应技术使用,智能感应存在,飞睿科技毫米波雷达
  10. 电脑电池出场容量与目前最大容量查询查询