/*
一.获取执行计划的 6 种方法:
1. explain plan for 获取; --如果某 SQL 执行
非常长时间才会出结果,甚至慢到返回不了结果,这时候看执行计划就只能用方法 1;
步骤 1:explain plan for "你的 SQL"
步骤 2:select * from table(dbms_xplan.display());
2.set autotrace on -- 跟踪某条 SQL 最简
单的方法是方法 1,方法 2;
步骤 1:set autotrace on
步骤 2:在此处执行你的 SQL 即可,后续自然会有结果输出
3. statistics_level=all; -- 要想
获取表被访问的次数,只能使用方法 3;
步骤 1:alter session set statistics_level=all ;
或者 如果你用 /*+ gather_plan_statistics */ 的方法
步骤 2:在此处执行你的 SQL
步骤 3:select * from table(dbms_xplan.display_cursor(null,null,'allstats
last'));
/*
关键字解读(其中 OMem、1Mem 和 User-Mem 在后续的课程中会陆续见到):
Starts 为该 sql 执行的次数。表被访问次数
E-ROWS 预测的行数
A-ROWS 真实的行数
Buffers 为每一步实际执行的逻辑读或一致性读。
Reads 为物理读。
OMem:当前操作完成所有内存工作区(Work Aera)操作所总共使用私有内存(PGA)中工作区的大小,
这个数据是由优化器统计数据以及前一次执行的性能数据估算得出的
1Mem:当工作区大小无法满足操作所需的大小时,需要将部分数据写入临时磁盘空间中(如果仅需要写入一
次就可以完成操作,
就称一次通过,One-Pass;否则为多次通过,Multi_Pass).该列数据为语句最后一次执行中,单次
写磁盘所需要的内存
大小,这个由优化器统计数据以及前一次执行的性能数据估算得出的
User-Mem:语句最后一次执行中,当前操作所使用的内存工作区大小,括号里面为(发生磁盘交换的次
数,1 次即为 One-Pass,
大于 1 次则为 Multi_Pass,如果没有使用磁盘,则显示 OPTIMAL)
OMem、1Mem 为执行所需的内存评估值,0Mem 为最优执行模式所需内存的评估值,1Mem 为 one-pass 模
式所需内存的评估值。
0/1/M 为最优/one-pass/multipass 执行的次数。Used-Mem 耗的内存)
*/
4. 通过 dbms_xplan.display_cursor 输入 sql_id 参数直接获取 --如果想观察到某条 SQL 有多条
执行计划的情况,只能用方法 4 和方法 6
步骤 1: select * from table(dbms_xplan.display_cursor('&sq_id')); (该方法是
从共享池里得到)
注:
1. 还有一个方法,select * from
table(dbms_xplan.display_awr('&sq_id'));(这是 awr 性能视图里获取到的)
2. 如果有多执行计划,可以用类似方法查出
select * from table(dbms_xplan.display_cursor('cyzznbykb509s',0));
评论