代码改变世界

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

2014-11-04 23:45 by AlfredZhao, ... 阅读, ... 评论, 收藏, 编辑

1.使用sql_trace跟踪执行计划

1.1 当前session跟踪:

alter session set sql_trace = true; //开始sql_trace

alter 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_trace
4 - 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跑得更快》