ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 会话的跟踪以及执行计划的获取

会话的跟踪以及执行计划的获取

原创 Linux操作系统 作者:andyann 时间:2011-07-14 18:01:24 0 删除 编辑
         在DBA诊断方法中,会话的跟踪是比较重要的一个部分。如何获取会话或者某些DML代码的执行计划成为SQL优化重要工具,下面是日常常用3三种跟踪方法,以及一些工具的使用。

1、AUTOTRACE功能
适用:当前会话跟踪,当前屏幕输出。
功能:查看执行查询的运行计划和占用的资源,使用的比较频繁。

SET AUTOTRACE OFF                           -- 不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN           -- AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS     -- 只显示执行统计信息
SET AUTOTRACE ON                            -- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY          -- 同set autotrace on,但是不显示查询输出

2、SQL_TRACE(Oracle的辅助诊断工具)

(1)全局使用

在pfile/spfile参数文件中指定:  sql_trace =true

SQL> alter system set sql_trace = true;

说明:全局开启SQL_TRACE会导致所有进程被跟踪,包括后台进程及所有用户进程,会导致比较严重的性能问题,所以最好不要开启此功能,默认关闭。

(2)当前会话使用:

SQL> alter session set timed_statistics = true;

SQL> alter session set sql_trace = true;

SQL>执行你的代码

SQL> alter session set sql_trace = false;

SQL>  @gettrcname

(3)跟踪其他用户进程:

使用包DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION进行跟踪,
前提是需要手动找到会话的sid,serial#,这个方法就不多陈述了。

SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true)

SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false)

SQL>  @gettrcname

3、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

(1)全局设置。

参数文件中添加:event="10046 trace name context forever,level 12"

(2)对当前session设置。

SQL> alter session set events '10046 trace name context forever';

SQL> alter session set events '10046 trace name context forever, level 8';

SQL>执行你的代码

SQL> alter session set events '10046 trace name context off';

SQL>  @gettrcname

(3)对其他用户session设置(调用DBMS_SYSTEM.SET_EV系统包):。

SQL> exec dbms_system.set_ev(sid,serial#,10046,8,'user');

SQL> exec dbms_system.set_ev(sid,serial#,10046,0,'user');

SQL>  @gettrcname
 
4、TKPROF 进行格式化。
跟踪完后使用TKPROF命令进行文件的格式化。

tkprof

5、runstats
tom kyte写的测试工具用于比较代码执行计划的异同。
有兴趣的朋友可以下载代码下来尝试一下。

附:linux下gettrcname代码
SELECT    a.VALUE
^X\t"T#b1Ep^#RK24070945       || b.symbol
U Y}I}ja,B1N*qa\G24070945       || c.instance_nameITPUB个人空间r7w!W P K q
       || '_ora_'
Ocg5^ NG)G;QFbZ24070945       || d.spidITPUB个人空间 a*Az}L
       || '.trc' trace_fileITPUB个人空间(r.H a"@@ {
  FROM (SELECT VALUEITPUB个人空间;dd:]j(L i8e
          FROM v$parameter
0gc1b/Ut24070945         WHERE NAME = 'user_dump_dest') a,
1A8T w2y9q24070945       (SELECT SUBSTR (VALUE, -6, 1) symbolITPUB个人空间H0wV"A/j:bL
          FROM v$parameterITPUB个人空间+DT*Ci)l8J v
         WHERE NAME = 'user_dump_dest') b,
N GPa.Q(o24070945       (SELECT instance_nameITPUB个人空间.RnA:S[2cKh
          FROM v$instance) c,ITPUB个人空间&Li.y;X M bGoh
       (SELECT spid
2j g)a6X#j6_d24070945          FROM v$session s, v$process p, v$mystat m
,j*M,s1i2|y:K+e9K24070945 WHERE s.paddr = p.addr AND s.SID = m.SID AND m.statistic# = 0) d;ITPUB个人空间S,u@U/_M7[!J

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24070945/viewspace-702223/,如需转载,请注明出处,否则将追究法律责任。

上一篇: sqlplus的使用
请登录后发表评论 登录
全部评论

注册时间:2011-03-24

  • 博文量
    25
  • 访问量
    89362