set autotrace可以用来跟踪SQL执行计划,收集统计信息。
SQL> select * from v$version where rownum<3;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
SQL> select * from dual;
--分别在执行sql前设置set autotrace 的不同参数,观察效果
SQL> set autotrace
用法: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
--关闭跟踪执行计划和统计信息功能。
SQL> set autotrace off;
--执行计划和统计信息都显示
SQL> set autotrace on ;
--只显示执行计划和统计信息,不显示sql执行结果。
SQL> set autotrace traceonly;
-- 只显示执行计划
SQL> set autotrace on explain;
--只显示统计信息
SQL> set autotrace on statistics;
使用autotrace功能时,oracle启用了两个session。
一个用来执行SQL。另一个用来记录执行计划和输出结果。
SQL> set autotrace off;
--未启用autotrace前,只有一个sesion
SQL> select s.SID, s.SERIAL#, s.USERNAME, p.PID, p.SPID
2 from v$session s, v$process p
3 where s.PADDR = p.ADDR
4 and s.USERNAME is not null ;
SID SERIAL# USERNAME PID SPID
---------- ---------- ------------------------------ ---------- ------------
136 5 REPORT 22 5320
SQL> set autotrace on statistics;
--启用autotrace 后,有两个session。并且两个session对于一个spid。
SQL> select s.SID, s.SERIAL#, s.USERNAME, p.PID, p.SPID
2 from v$session s, v$process p
3 where s.PADDR = p.ADDR
4 and s.USERNAME is not null ;
SID SERIAL# USERNAME PID SPID
---------- ---------- ------------------------------ ---------- ------------
143 118 REPORT 22 5320
136 5 REPORT 22 5320
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
0 consistent gets
0 physical reads
0 redo size
688 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed