ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 查看oracle执行计划

查看oracle执行计划

原创 Linux操作系统 作者:oracle-admin 时间:2011-08-18 15:09:42 0 删除 编辑
有的时候,业务程序很长时间难以得到响应,甚至根本就无法正常响应,有可能是程序的问题,也有可能是数据库的sql语句的问题(在需要访问的数据量很大的情况下)也有可能是程序调用sql的时候的异常,咱们dba为了协助开发人员排查数据库的时候,需要查看咱们的存储过程或者单独使用过程中的sql语句的执行效率,此时我们就需要查看执行计划。
查看oracle的执行计划方法很多:
方法一,可以通过pl/sql软件里面的窗口,然后输入sql语句运行即可看到;
方法二,先执行SQL> explain plan for select count(*) from event_performance_last where city='beijing';

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

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1592467753

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

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

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


PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |          |     1 |     9 |    29   (0)|
00:00:01 |

|   1 |  SORT AGGREGATE       |          |     1 |     9 |          |
     |

|*  2 |   INDEX FAST FULL SCAN| IDX_EP_LAST_CITY |  9589 | 86301 |    29   (0)|
00:00:01 |

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

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


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

   2 - filter("CITY"='beijing')

14 rows selected.
便可以看到oracle的执行计划了。
方法三,使用autotrace,
1)先用sys用户运行@/ORACLE_HOME/sqlplus/admin/plustrce.sql
输出如下:
set   echo   on
drop   role   plustrace;
create   role   plustrace;
grant   select   on   v_$sesstat   to   plustrace;
grant   select   on   v_$statname   to   plustrace;
grant   select   on   v_$session   to   plustrace;
grant   plustrace   to   dba   with   admin   option;
set   echo   off
2)产生plustrace角色,然后在sys用户下把此角色赋予需要使用autotrace查看执行计划的用户
SQL>   grant   plustrace   to   its;
3)然后使用当前用户(即授予查看执行计划的普通用户,如its)运行/ORACLE_HOME/rdbms/admin/utlxplan.sql,创建一个plan_table,用来存储分析sql语句的结果;
输出如下:
表已创建
表的内容如下:
create   table   PLAN_TABLE   (
statement_id         varchar2(30),
timestamp               date,
remarks                   varchar2(80),
operation               varchar2(30),
options                   varchar2(30),
object_node           varchar2(128),
object_owner         varchar2(30),
object_name           varchar2(30),
object_instance   numeric,
object_type           varchar2(30),
optimizer               varchar2(255),
search_columns     number,
id                             numeric,
parent_id               numeric,
position                 numeric,
cost                         numeric,
cardinality           numeric,
bytes                       numeric,
other_tag               varchar2(255),
partition_start   varchar2(255),
partition_stop     varchar2(255),
partition_id         numeric,
other                       long,
distribution         varchar2(30));
4)最后使用当前普通用户在sqlplus中执行
set   time   on; (说明:打开时间显示)
set   autotrace   on; (说明:打开自动分析统计,并显示SQL语句的运行结果)
set   autotrace   traceonly; (说明:打开自动分析统计,不显示SQL语句的运行结果)
5)最后在sqlplus中执行你需要查看执行计划的sql,就可输出该语句的执行计划。
eg:
SQL> select count(*) from event_performance_last where city='dalian';

  COUNT(*)
----------
      1584


Execution Plan
----------------------------------------------------------
Plan hash value: 2372559996

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

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

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

|   0 | SELECT STATEMENT  |             |       1 |       9 |       7   (0)| 00:0
0:01 |

|   1 |  SORT AGGREGATE   |             |       1 |       9 |          |
     |

|*  2 |   INDEX RANGE SCAN| IDX_EP_LAST_CITY |    1593 | 14337 |       7   (0)| 00:0
0:01 |

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


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

   2 - access("CITY"='dalian')


Statistics
----------------------------------------------------------
    304  recursive calls
      0  db block gets
    114  consistent gets
      8  physical reads
      0  redo size
    527  bytes sent via SQL*Net to client
    520  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      5  sorts (memory)
      0  sorts (disk)
      1  rows processed
6)要关闭以上功能,只用当前普通用户在sqlplus中运行
set   time   off; (说明:关闭时间显示)
set   autotrace   off; (说明:关闭自动分析统计)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23502881/viewspace-705265/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle 11g自动分析
请登录后发表评论 登录
全部评论

注册时间:2011-03-23

  • 博文量
    22
  • 访问量
    110096