1.Explain Plan For SQL
该方法不是SQL语句实际执行后所产生的执行计划,是根据统计信息估算的执行计划,信息来自plan_table。
SCOTT@orcl>explain plan for selecte.ename,e.sal,d.loc,d.deptno from emp e,dept d where e.deptno=d.deptno;
SCOTT@orcl>select * from table(dbms_xplan.display());
第二句话是从plan_table里取数据,它只取plan_table里最新的一条语句
证实一下:
2.SQLPLUS AUTOTRACE
set autotrace on|off|traceonly {explain|statistics};
set autotrace on --实际执行SQL并显示执行结果,显示执行计划与统计信息
set autotraceoff关闭AUTOTRACE
set autotrace traceonly显示执行计划与统计信息
set autotracetraceonly explain显示执行计划
set autotrace traceonly statistics显示统计信息
注:除setautotrace traceonly {explain | statistics}外均实际执行SQL,但仍未必是真实计划,信息来自plan_table。
证实一下:
如何打开autotrace功能
1. 创建基础表
通过运行$ORACLE_HOME/rdbms/admin/utlxplan 脚本完成,该脚本用于创建plan_table表。
并授权给public(公共角色)
grant all on plan_table to public;
2.创建plustrace 角色
这里需要运行$ORACLE_HOME/sqlplus/admin/plustrce.sql
3.所有用户都可以查看sql执行计划
grant plustrace to public;
3.SQL TRACE(10046和10053)
可以用SQL_TRACE来跟踪SQL的执行情况,通过跟踪了解一条SQL或者PL/SQL包的运行情况,SQL_TRACE命令会将SQL执行的整个过程输出到一个trace文件中,我们可以读这个trace 文件来了解在这个SQL执行过程中Oracle 都做了哪些操作。
如何产生trace文件
1) 启动SQL_TRACE
SCOTT@orcl>alter session set sql_trace=true;
2) 进行相关事务操作
SCOTT@orcl>select * from emp;
3) 关闭SQL_TRACE
SCOTT@orcl>altersession set sql_trace=false
SCOTT@ orcl>col name for a40;
SCOTT@ orcl>col value for a65;
SCOTT@ orcl>select name,value from v$diag_infowhere name like '%Default%';
NAME VALUE
-----------------------------------------------------------------------------
Default Trace File /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_13629.trc
该事件收集的信息也是放在trace文件中,查看trace文件的方法,使用TKPROF 工具(TKPROF工具其实就是一个将文件中的内容进行下格式话处理,使你能看的更舒畅)。
$tkprof/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_13629.trc mytrace
$ls -al mytrace*
$-rw-r--r-- 1 oracle oinstall 28817 Apr 26 17:35mytrace.prf
$more mytrace.prf
证实一下:
两个特殊的跟踪事件10046事件和10053事件
10046事件按照收集信息内容,可以分成4个级别:
Level1: 等同于SQL_TRACE的功能
Level4: 在Level 1的基础上增加收集绑定变量的信息
Level8: 在Level 1 的基础上增加等待事件的信息
Level12:等同于Level 4+Level 8, 即同时收集绑定变量信息和等待事件信息。
SQL>alter session set events '10046 trace namecontext forever, level 12'; --启动10046事件
执行相关事务
SQL>alter session set events '10046 trace namecontext off'; -- 关闭10046事件
10053 事件是oracle提供的用于跟踪sql语句成本计算的内部事件,它能记载CBO模式下oracle优化器如何计算 sql成本,生成相应的执行计划。
跟10046跟踪事件不同,10053提供了两个跟踪级别,但是级别2的跟踪信息比级别1少(其他跟踪事件如10046跟踪,级别越高信息越多),
如何设置10053事件
设置本session的10053
Alter session set events '10053 trace namecontext forever,level 1'; --启动10053事件
执行相关事务
Alter session set events '10053 trace namecontext off'; -- 关闭10046事件
对于SQL_TRACE,一般用tkprof看的更清楚些。
$tkprof/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_13629.trc orcl_ora_13629.txt
$ls -al orcl_ora_13629.txt
$-rw-r--r-- 1 oracle oinstall 28817 Apr 26 17:35orcl_ora_13629.txt
$more orcl_ora_13629.txt