首页 > 代码库 > SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划

SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划

1.使用sql_trace跟踪执行计划

1.1 当前session跟踪:

alter session set sql_trace = true; //开始sql_tracealter session set tracefile_identifier = jytrace; //设定trace文件的标识符alter session set sql_trace = false; //结束sql_trace

1.2 其他session跟踪:(根据其他session的sid, serial#定位,最常用)

exec dbms_system.set_sql_trace_in_session(sid,serial#,true); //开始exec dbms_system.set_sql_trace_in_session(sid,serial#,false); //结束

1.3 Instance 级别:(很少用到,会造成系统的额外开销)

alter system set sql_trace = true; //开始alter system set sql_trace = false; //结束

实例级别还可以在pfile/spfile参数文件中加 sql_trace = true

2.使用10046内部事件跟踪更详细的信息

2.1 关于10046事件的四个级别,参考盖总博客,区别如下:

10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.10046事件可以设置以下四个级别:1 - 启用标准的SQL_TRACE功能,等价于sql_trace4 - Level 1 + 绑定值(bind values)8 - Level 1 + 等待事件跟踪12 - Level 1 + Level 4 + Level 8类似sql_trace,10046事件可以在全局设置,也可以在session级设置。

2.2 当前session跟踪:

alter session set events 10046 trace name context forever, level 12;
alter session set events 10046 trace name context off;

2.3 其他session跟踪(最常用):

exec dbms_monitor.session_trace_enable(sid,serial#,waits=>true,binds=>true); //开始
exec dbms_monitor.session_trace_disable(sid,serial#);  //结束

2.4 实例级别(很少用到):

pfile/spfile参数文件增加 event = "10046 trace name context forever,level 12"

3.阅读生成的跟踪文件

3.1定位跟踪文件(下面这条sql来源Dave博客)

Oracle 10g版本:生成的trace文件默认路径是$ORACLE_BASE/admin/SID/udump下.

Oracle 11g版本:生成的trace文件默认路径是$ORACLE_BASE/diag/rdbms/jy/jy/trace下.

SELECT      d.VALUE         || /         || LOWER (RTRIM (i.INSTANCE, CHR (0)))         || _ora_         || p.spid         || .trc            AS "trace_file_name"  FROM   (SELECT   p.spid            FROM   v$mystat m, v$session s, v$process p           WHERE   m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,         (SELECT   t.INSTANCE            FROM   v$thread t, v$parameter v           WHERE   v.NAME = thread                   AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,         (SELECT   VALUE            FROM   v$parameter           WHERE   NAME = user_dump_dest) d;

3.2使用tkprof命令美化生成的跟踪文件

下面是我经常用的,有关tkprof命令的更详细说明,敲完tkprof命令直接回车就可以看到。

tkprof xxx.trc xxx.txt explain=system/oracle  sys=n

 

参考网址:http://www.eygle.com/archives/2004/10/use_sql_trace_to_diagnose_database.html

http://blog.csdn.net/tianlesoftware/article/details/5857023

参考书籍:《让Oracle跑得更快》

SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划