日期:2014-05-16 浏览次数:20516 次
获取执行计划的4种方式
?
1:从计划表中获取,计划表名默认是plan_table,可以直接查询计划表,也可以使用dbms_xplan.display函数
?
?
EXPLAIN PLAN FOR SELECT * from tbuser; SELECT * from TABLE(dbms_xplan.display);?
2:从动态视图中获取,有4个动态视图(v$sql_plan,v$sql_plan_statistics,v$sql_workarea,v$sql_plan_statistics_all),可以直接查询动态视图,也可以使用dbms_xplan.display_cursor函数
?
?
SELECT * from TABLE(dbms_xplan.display_cursor('1hqjysdfoiewr',0));?
3:从awr库中获取,可以直接查询视图dba_hist_sql_plan,也可以使用dbms_xplan.display_awr函数
?
?
SELECT * from TABLE(dbms_xplan.display_awr('1hqjysdfoiewr'));?
4:通过10053,10132,10046事件或sql_trace跟踪
?
ALTER SESSION SET EVENTS '10053 trace name context forever'; ALTER SESSION SET EVENTS '10053 trace name context off';
?
执行计划中特殊字段说明:
?
tempspc: ? ? ?估算要使用的临时表空间,如果pga内存够用的话,这个字段应该就不显示了。
?
cost(%cpu):估算的成本,%cpu代表了cpu开销的百分比,父操作开销包含子操作开销。
?
starts: ? ? ? ? ?操作执行次数,很有用。
?
a-rows: ? ? ? ?返回的真实记录数。
?
a-time: ? ? ? ? 使用的真实时间。
?
omem: ? ? ? ? ?最优执行所需内存的估算值。
?
imem: ? ? ? ? ? 一次通过(one-pass)执行所需内存的估算值。
?
0/1/m: ? ? ? ? ?最优/一次通过/多次通过(multipass)操作执行的次数。
?
user-men: ? ?最后一次执行时操作使用的内存。
?
user-tmp: ? ? 最后一次执行时操作使用的临时表空间大小,扩大1024倍。
?
max-tem: ? ? 操作使用的最大临时表空间大小,扩大1024倍。
?
注:one-pass 使用最少的磁盘操作,大部分操作在内存中执行。
?
? ? ??multipass 因工作区设置太小,存在大量的磁盘操作,性能下降。
?