ITPub博客

首页 > 数据库 > Oracle > Oracle查看执行计划常用方法

Oracle查看执行计划常用方法

Oracle 作者:zhang_1202 时间:2015-11-12 14:55:34 0 删除 编辑

 

查看执行计划常用方法

 

1)explain plan命令

2)DBMS_XPLAN包

3)AUTOTRACE开关

4)10046事件

5)10053事件

6)AWR SQL报告

 

 

1、 explain plan(相当于PL/SQL的F5)

explain plan for select * from dual;

select * from table(dbms_xplan.display);

 

注:相关表plan_table$是一个on commit preserve rows的global temporary table。

 

2、 DBMS_XPLAN包

方法1:配合explain plan使用

explain plan for select * from dual;

select * from table(dbms_xplan.display);

 

方法2:跟在执行语句后面,‘advanced’比‘all’多显示了“Outline Data”内容

set linesize 800

set pagesize 900

col plan_table_output for a200

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


方法3:只要目标SQL的执行计划所在的Child Cursor还没有被age out出Shared Pool,就可以使用该方法查看SQL执行计划

select sql_text, sql_id, hash_value, child_number

        from v$sql

       where sql_text like 'select count(*) from sh.customers%';

select * from table(dbms_xplan.display_cursor('sql_id/hash_value',

child_cursor_number,'advanced'));



方法4:用于查看指定SQL的所有历史执行计划,没有谓词信息

--目标SQL可能有多个Child Cursor,即多个执行计划

select sql_text, sql_id, version_count, executions

        from v$sqlarea

 where sql_text like 'select count(*) from sh.customers%';

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


注:Oracle把执行计划采样数据从V$sql_plan搬到AWR Repository基表wrh$_sql_plan中没有保留谓词信息的记录。

 

3、 AUTOTRACE开关

可以额外观察到目标SQL执行时所耗费的物理读、逻辑读、产生redo数量以及排序的数量。(statistics)

set outotrace on;

set outotrace off;

set outotrace traceonly;--不现实SQL执行结果

set outotrace traceonly explain;

set outotrace traceonly statistics;

 

 

 

4、 10046事件与tkprof命令

明确显示了目标SQL实际执行计划中每一个执行步骤所消耗的逻辑读、物理读和花费的时间。(在USER_DUMP_DEST目录下生成trace文件。)

--打开

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

oradebug event 10046 trace name context forever,level 12;

--关闭

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

oradebug event 10046 trace name context off;

注:level 12表示trace文件中还包含目标SQL所使用的绑定变量的值以及该session所经历的等待事件。

 

--操作步骤--

a、SQL> oradebug setmypid;

b、SQL> oradebug event 10046 trace name context forever,level 12;

c、SQL> select count(*) from dual;

d、SQL> oradebug tracefile_name;

   /oracle/app/oracle/diag/rdbms/test/test/trace/test_ora_4288.trc

e、SQL> oradebug event 10046 trace name context off;

f、[oracle@test ~]$tkprof /oracle/app/oracle/diag/rdbms/test

/test/trace/test_ora_4288.trc /oracle/test_ora_4288_tkprof.trc

 

5、 10053事件

6、 AWR SQL报告、Statspack报告

7、 一些现成的脚本(如display_cursor_9i.sql)

 

 

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

请登录后发表评论 登录
全部评论

注册时间:2015-11-09

  • 博文量
    40
  • 访问量
    108920