ORACLE执行计划的查看

1.  采用 explain plan

 

      如果 PLAN_TABLE 表不存在,执行 $ORACLE_HOME/rdbms/admin/utlxplan.sql 创建 plan_table 表。创建表的过程如下:

    打开 cmd

    sqlplus /nolog

    conn test/test123@test

    将 $ORACLE_HOME/rdbms/admin/utlxplan.sql 的内容粘贴到 cmd ,然后回车执行。

 

    第一步: explain plan for select * from ......

 

    第二步: select * from table(DBMS_XPLAN.Display)

扫描二维码关注公众号,回复: 1358036 查看本文章

    如:

    SQL> explain plan for select * from student;

 

    Explained.

 

    SQL> select * from table(DBMS_XPLAN.Display);

 

    也可以查找 SQL ID 后再看执行计划

    select sql_id,address,hash_value, executions, sql_text from v$sql where sql_text like '%select id from student%';

    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('sql_id', 0, 'ADVANCED'));

 

     DBMS_XPLAN是用来展现执行计划的, 通过display函数我们可以展示explain plan方法获得的执行计划,通过display_cursor函数可以展示动态性能视图(v$sql_plan和v$sql_plan_statistics等)中获得的执行计划。explain plan只是一个评估的执行计划,并不是真正SQL执行的路径,而动态性能视图是SQL执行过程中的执行路径,所以说,更准确一些。

 

2.  使用 oracle 第三方工具

   a. plsql developer

  写好SQL 后,按F5

   b.Toad

  写好SQL 后,按Ctrl+E

3.  使用 Autotrace

  

     Set timing on -- 记录所用时间

     Set autot trace -- 自动记录执行计划

 

     关于Autotrace 几个常用选项的说明:

 

     SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式

 

     SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE 只显示优化器执行路径报告

 

     SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息

 

     SET AUTOTRACE ON ----------------- 包含执行计划和统计信息

 

     SET AUTOTRACE TRACEONLY ------ set autotrace on ,但是不显示查询

 

 

    例:

SQL> SET AUTOTRACE ON

SQL> select id from student;

 

4.  sql trace

 

     a.alter session set sql_trace=true;

 

     b. 执行 sql

 

     c.alter session set sql_trace=false;

 

     d. 利用 TKPROF 工具格式化输出的 trace 文件。

    命令为:Tkprof   文件路径   d:1.txt

    注: tkprof 直接在 cmd 下就可以输入

 

    任何一条 SQL ,都包含三个步骤

    分析 (Parse):SQL 的分析阶段

    执行 (Execute):SQL 的执行阶段

    数据提取 (Fetch): 数据提取阶段 ( 数据提取不一定一次就可以完成 )

 

    COUNT: 计数器,表示当前的操作被执行了多少次。

    CPU: 当前的操作消耗 CPU 的时间(单位秒)

    ELAPSED: 当前的操作一共用时多少。

    DISK: 当前操作的物理读(磁盘 I/O 次数);

    QUERY: 当前操作的一致性读方式读取的数据快数(通常是查询时使用)

    CURRENT: 当前操作的 CURRENT 方式读取的数据块数(通常是修改时使用)

    ROWS: 当前操作处理的数据记录数

 

    CR :一致性度 PR :物理读, PW: 物理写, TIME 就不用解释了吧单位是 us( 微秒 )

 

5.  诊断事件 (10046)

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

select * from student;

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

tkprof  文件路径   d:5.txt

6.  10053 事件

启用 10053 事件

ALTER SESSION SET EVENTS='10053 trace name context forever, level 1';

ALTER SESSION SET EVENTS='10053 trace name context forever, level 2';

关闭 10053 事件:

ALTER SESSION SET EVENTS '10053 trace name context off';

如:

ALTER SESSION SET EVENTS='10053 trace name context forever, level 2';

select * from student;

ALTER SESSION SET EVENTS '10053 trace name context off';

 

注意:
1
sqlplus 中打开 autotrace 看到的执行计划实际上是用 explain plan 命令得到的, explain plan 命令不会进行 bind peeking 。应该通过 v$sql_plan 查看 SQL 的真实的执行计划。
2
10053 只对 CBO 有效,而且如果一个 sql 语句已经解析过,就不会产生新的 trace 信息。 (

刷新共享池,alter system flush shared_pool

3 10053 事件产生的 trace 文件不能用 tkprof 格式化。

4 、执行计划的查看顺序是:从内到外   从上到下。对于不并列的,靠右的先执行:对于并列的,靠上的先执行。

猜你喜欢

转载自zhuyuehua.iteye.com/blog/1648038