日期:2014-05-16  浏览次数:20494 次

获取执行计划的4种方式

获取执行计划的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 因工作区设置太小,存在大量的磁盘操作,性能下降。

?