/*
总的结论:
1.explainplanfor获取;
2.setautotraceon;
3.statistics_level=all;
5.10046trace跟踪
6.awrsqrpt.sql
二.适用场合分析
*/
----方法2(setautotraceon方式)
/*
步骤1:setautotraceon
另,有如下几种方式:
setautotraceon(得到执行计划,输出运行结果)
setautotracetraceonly(得到执行计划,不输出运行结果)
*/
/*
--缺陷:1.必须要等到语句真正执行完毕后,才可以出结果;
2.无法看到表被访问了多少次。
*/
----方法3(statisticslevel=all的方式)
/*
步骤1:altersessionsetstatistics_level=all;
步骤2:在此处执行你的sql
步骤3:select*fromtable(dbms_xplan.display_cursor(null,null,'allstatslast'));
另注:
1.如果你用/*+gather_plan_statistics*/的方法,可以省略步骤1,直接步骤2,3。
2.关键字解读(其中OMem、1Mem和User-Mem在后续的课程中会陆续见到):
E-Rows为执行计划预计的行数。
A-Rows为实际返回的行数。A-Rows跟E-Rows做比较,就可以确定哪一步执行计划出了问题。
A-Time为每一步实际执行的时间(HH:MM:SS.FF),根据这一行可以知道该sql耗时在了哪个地方。
Buffers为每一步实际执行的逻辑读或一致性读。
Reads为物理读。
OMem:当前操作完成所有内存工作区(WorkAera)操作所总共使用私有内存(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耗的内存
*/
/*
步骤1:select*fromtable(dbms_xplan.display_cursor('&sq_id'));(该方法是从共享池里得到)
注:
2.如果有多执行计划,可以用类似方法查出
select*fromtable(dbms_xplan.display_cursor('cyzznbykb509s',0));
select*fromtable(dbms_xplan.display_cursor('cyzznbykb509s',1));
*/
看懂执行计划:
前半部分如何查询执行计划
到 42分50秒:左右开始将执行计划的树形结构。隐藏列,每列的名字,含义。
85分24秒 讲实例