甲骨文各种执行计划优缺点

  

一。获取甲骨文执行计划的方法有6种,各自的优缺点如下,根据实际情况进行选择使用:

  
      <李>解释计划的方式李   
  

步骤1:解释后的计划跟着SQL语句
步骤2:select * from表(dbms_xplan.display ());

  

优点:1。不需要真正的去执行语句,快捷方便
缺点:1。虽然快捷但是因为没有真正去运行,所以没有输出运行时的相关统计信息(逻辑读,递归调用,物理读)
2。不知道被处理的行数
3。不知道表被访问的次数

     <李>设置autotrace>   <李>统计水平=所有方式李      

步骤1:改变会话设置statistics_level=所有(如果之前有将autotrace>设置   <李>带入sql_id方式李      

步骤1:从表中选择 (dbms_xplan.display_cursor('和sql_id '));(该方法是从共享池里得的到,这个语句必须得跑过一次)
另一方法:从表中选择
(dbms_xplan.display_awr(及sq_id)),(这是心田;性能视图里获取到的)

  

如果有多执行计划,可以用类似方法查出
从表中选择 (dbms_xplan.display_cursor (sql_id, 0));
从表中选择
(dbms_xplan.display_cursor (' sql_id ', 1);

  

优点:1。知道sql_id立即可得到执行计划,和解释计划一样无需执行;
2。可以得到真实的执行计划。而方法1与2的则是预估

  

缺陷1。没有输出运行时的相关统计信息(逻辑读,递归调用,物理读),
2。无法判断是处理的行数;
3。无法判断表被访问的次数。

     <李> 10046跟踪方式李      

步骤1:改变会话设置事件“10046跟踪的名字永远上下文,级别12”;
步骤2:执行sql语句
步骤3:改变会话设置事件“10046跟踪名称上下文”;
步骤4:找到跟踪后产生的文件

  

选择d。值
'/'
低(空白(我。实例,对应(0)))
ora
p.spid
'。曾经的trace_file_name(选择p
。spid
从v mystat美元,v $会话,过程p
在美元。统计#=1和s.sid=m。sid p.addr=s.paddr) p
(选择t。从v $线程实例
t v $参数v
v.name=跋叱獭?br/>, (v.VALUE=https://www.yisu.com/zixun/0或t.thread #=to_number (v.VALUE)))我,
(从v $参数选择值

在name=' user_dump_dest ') d;退出


  

步骤5:tkprof继续文件路径目标txt文件sys=没有那种=prsela exeela, fchela

  

优点:1 .可以看出SQL语句对应的等待事件
2。如果SQL语句中有函数调,用SQL中有SQL,将会都被列出。
3。可以方便的看出处理的行数,产生的物理逻辑读。
4。可以方便的看出解析时间和执行时间。
5。可以跟踪整个程序包

  

缺陷:1 .步骤繁琐,比较麻烦
2。无法判断表被访问了多少次。
3。执行计划中的条件语句不能清晰的展现出来。

     <李> awrsqrpt。李sql方式      

步骤1:@吗?/rdbms/admin/awrsqrpt。sql
步骤2:选择你要的断点值(开始拍照和结束)
步骤3:输入该语句的sql_id

  

优点:1 .同样也可以获取到多条执行计划,并可在报表输出
2。知道sql_id立即可得到执行计划,和解释计划一样无需执行;
3。可以得到真实的执行计划。而方法1与2的则是预估

  

缺陷:1 .步骤繁琐,比较麻烦,还需要查拍的时间
2。没有输出运行时的相关统计信息(逻辑读,递归调用,物理读),
3。无法判断是处理的行数;
4。无法判断表被访问的次数。

  

适用情况总结:

  

1。如果某SQL执行非常长时间才会出结果,甚至慢到返回不了结果,这时候看执行计划就用解释或计划者将autotrace traceon统计(前提是选择),
2。跟踪某条SQL最简单的方法是解释计划,其次就是设置自动跟踪(traceon);
3。如果想观察到某条SQL有多条执行计划的情况,只能通过dbms_xplan.display_cursor输入sql_id参数直接获取和查看awrsqrpt.sql;
4。如果SQL中含有多函数,函数中套有SQL等多层递归调用,想准确分析,只能用10046跟踪跟踪;
5。要想确保看到真实的执行计划,不能用解释计划和设置自动跟踪;
6。要想获取表被访问的次数,只能使用statistics_level=所有的方法;

  

二。如何辨别低效的SQL:

  

有7个可以注意的地方

  

1。真实返回值与产生逻辑读的比例
一般而言,每获取一行开销5个以下的逻辑读是ok的。
如果用statitics_level=所有获取执行计划,查看缓冲区(逻辑读)/a行(获取行数)的比值,如果用自动跟踪,则查看得到一致(逻辑读)/行处理(获取行数)的比值

甲骨文各种执行计划优缺点