zoukankan      html  css  js  c++  java
  • [ORACLE] ORACLE 查看执行计划 的方式

     ORACLE 查看执行计划 的方式

    获取方法

    优点

    缺点

    [explain plan for] plsqlF5

    explain plan for select * from dual;
    
    select * from table(dbms_xplan.display());

    无需真正执行,快捷方便

    1.没有输出相关统计信息,例如产生了多少逻辑读,多少次物理读,多少次递归调用的情况;
    2.无法判断处理了多少行;
    3.无法判断表执行了多少次

    [set autotrace on]-sql*plus 

    set autotrace on
    
    select * from dual;

    1.可以输出运行时的相关统计信息(产生多少逻辑读、多少次递归调用、多少次物理读等);

    2.虽然要等语句执行完才能输出执行计划,但是可以有traceonly开关来控制返回结果不打屏输出

    1.必须要等SQL语句执行完,才出结果

    2.无法看到表被访问了多少次;

    [statistics_level=all]

     

    alter session set statistics_level=all;
    set serveroutput off
    SELECT * FROM TEST01;
    select * from table
    (dbms_xplan.display_cursor(null,null,'ADVANCED ALLSTATS LAST PEEKED_BINDS'))

     

     

    1.可以清晰的从starts得出表被访问多少次;

    2.可以从E-RowsA-Rows得到预测的行数和真实的行数,从而可以准确判断Oracle评估是否准确;

    3.虽然没有准确的输出运行时的相关统计信息,但是执行计划中的Buffers就是真实的逻辑读的数值;

    1.必须要等执行完后才能输出结果;

    2.无法控制结果打屏输出,不像autotrace可以设置traceonly保证不输出结果;

    3.看不出递归调用,看不出物理读的数值

    [dbms_xplan.display_cursor]

    select * from table(dbms_xplan.display_cursor('04jc5nwr30r01',null,'allstats last'));
    select * from table( dbms_xplan.display_cursor('&sql_id') );

    1.知道sql_id即可得到执行计划,与explain plan for一样无需执行;

    2.可得到真实的执行计划

    1.没有输出运行的统计相关信息;

    2.无法判断处理了多少行;

    3.无法判断表被访问了多少次;

    [事件10046 trace]

     步骤1alter session set events '10046 trace name context forever,level 12'; --开启追踪
    步骤2:执行sql语句;
    步骤3alter session set events '10046 trace name context off'; --关闭追踪
    步骤4:找到跟踪后产生的文件(开启10046前先用‘ls -lrt’看一下文件,执行结束后再看哪个是多出来的文件即可)
    步骤5tkprof trc文件 目标文件 sys=no sort=prsela,exeela,fchela --格式化命令

    1.可以看出sql语句对应的等待事件;

    2.如果函数中有sql调用,函数中有包含sql,将会被列出,无处遁形;

    3.可以方便的看处理的行数,产生的逻辑物理读;

    4.可以方便的看解析时间和执行时间;

    5.可以跟踪整个程序包

    1.步骤繁琐;

    2.无法判断表被访问了多少次;

    3.执行计划中的谓词部分不能清晰的展现出来

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    查看的级别

    alter system set statistics_level=all;
    alter session set statistics_level=all;
    select /*+ gather_plan_statistics*/...

    附1 dbms_xplan.display_cursor

    ALLSTATS = IOSTATS(IO buffer,Reads)+MEMSTATS(Omem 1Mem Used-Mem)
    LAST:                仅显示最后一次执行的统计信息
    ADVANCED:          显示 outline,Query Block name,column project 等信息
    PEEKED_BINDS:    打印解析时使用的绑定变量
    TYPICAL:           不打印PROJECTION,ALIAS

     附二,查看SQLID

    select sql_id ,sql_text from v$sql where sql_text like '%$SQL%' #$SQL 指你的SQL文本

     附三,查看父游标,子游标

    #父游标
        select * from v$SQLAREA where SQL_ID=''
    #子游标
        select * from v$sql where sql_ID='';
        select * from v$sql_plan where sql_ID='';  #plan 查看position,depth,oder ,以作树形图
        select * from v$sql_optimizer_env where sql_ID='';#优化环境
  • 相关阅读:
    实验四——多分支结构及本章总结
    实验五——循环结构学习总结
    实验12——指针的基础应用 2
    实验11——指针的基础应用
    实验十——一维数组的定义及引用
    实验九——基本数据类型存储及应用总结
    实验八——函数定义及调用总结
    实验七——函数定义及调用总结
    实验六——循环结构程序练习总结
    实验五——循环结构学习总结
  • 原文地址:https://www.cnblogs.com/tingxin/p/12679374.html
Copyright © 2011-2022 走看看