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

         在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_name ITPUB个人空间r7w!W P K q
       || '_ora_'
Ocg5^ NG)G;QFbZ24070945       || d.spid ITPUB个人空间 a*Az}L
       || '.trc' trace_file ITPUB个人空间(r.H a"@@ {
  FROM (SELECT VALUE ITPUB个人空间;dd:]j(L i8e
          FROM v$parameter
0gc1b/Ut24070945         WHERE NAME = 'user_dump_dest') a,
1A8T w2y9q24070945       (SELECT SUBSTR (VALUE, -6, 1) symbol ITPUB个人空间H0wV"A/j:bL
          FROM v$parameter ITPUB个人空间+DT*Ci)l8J v
         WHERE NAME = 'user_dump_dest') b,
N GPa.Q(o24070945       (SELECT instance_name ITPUB个人空间.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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24070945/viewspace-702223/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值