ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle10g的trace

Oracle10g的trace

原创 Linux操作系统 作者:zergduan 时间:2009-02-26 16:53:48 0 删除 编辑

Oracle10g的trace - [Oracle]

2009-02-13

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://fbirdzp.blogbus.com/logs/35144917.html

总结一下最近常用的oracle trace相关,以备以后使用!仅限于oracle10g版本session级别和sql语句的跟踪!

1.使用dbms包激活trace

.DBA用户可以使用oracle自带的dbms_system或是dbms_monitor包打开对指定session的跟踪。

使用dbms包打开会话级别的跟踪时,需要设定session_id, serial_num以及监控参数waits和bind来激活数据库的trace。

  • 查询v$session视图获取session的信息session_id ,serial_num 信息。 
            session_id = v$session.sid
            serial_num = v$session.serial#
  • 设置true或是false,选择是否在当前trace里监控waits或是bind信息。
  • waits默认设置为true,binds默认设置为false

.普通数据库用户也可以使用dbms_session包激活当前session的跟踪,enable时不用再设置session_id等信息,也可以使用dbms_support进行其他session的跟踪。使用dbms包激活trace的语句如下:
----------------------------------------------------------------------------------------------------
使用dbms_system包激活trace
sql>desc dbms_system.set_sql_trace_in_session(sid => '##',serial# => '###',sql_trace => true);

使用dbms_monitor包激活trace
SQL> exec dbms_monitor.session_trace_enable(session_id => 1037,serial_num => 340,waits => true,binds => false);

使用dbms_session包激活trace
sql>exec dbms_session.session_trace_enable();

使用dbms_support包激活trace
sql>exec dbms_support.start_trace_in_session(sid=>xxx, serial#=>xxx, waits=>true, binds=>true);

结束trace,以dbms_monitor包为例
sql>exec dbms_monitor.session_trace_disable();

----------------------------------------------------------------------------------------------------

2. 10046 trace

10046 event在oracle调优诊断过程中使用的较多,长期从事oracle工作的人都会了解到这一块,所以关于10046 event在网上也比较泛滥。像偶这种水平一般的oracle测试人员,先熟练掌握怎么使用10046 trace,至于诊断调优的经验还是慢慢积累吧。

使用10046 trace需要注意的是:

  • 参数timed_statistics必须设置为TRUE
  • 建议max_dump_file_size设置为UNLIMITED,或者设置为一个很大的阙值
  • user_dump_dest参数定义trace文件存放目录
  • 10046 trace会占用一些资源,所以生产状态下慎用
  • 拥有'alter sesession’系统权限的用户才能打开10046 event

---------------------------------------------------------------------------------------------------
打开session级别的10046 trace
sql>alter session set events '10046 trace name context forever, level 12' ;

关闭10046 trace
sql>alter session set events  '10046 trace name context off';

---------------------------------------------------------------------------------------------------

另外需要注意的就是10046的级别了,有1、4、8、12这4个级别,级别越高收集的信息越多,当然消耗的资源也越大。

3.sql trace

会话级别跟踪sql语句,可以使用以下2种方式:

  • DBMS_SESSION.SET_SQL_TRACE procedure
  • ALTER SESSION SET SQL_TRACE = TRUE;

关闭当前session的sql trace,使用语句如下:

  • ALTER SESSION SET SQL_TRACE = FALSE;

也可以在初始参数文件spfile或是pfile里定义sql_trace=true,启动数据库自动开始进行sql语句的跟踪,这样会牺牲一部分性能。

4.如何查看trace信息

如何查看跟踪的信息呢?

不论是使用dbms包还是10046 event,生成的trc文件都存放在user_dump_dest参数定义的路径下,默认存放在$ORACLE_BASE/admin/instance_name/udump/下。

Oracle提供了tkprof命令,将trc文件格式化为固定形式的文件。

有些时候我们需要在trc文件里取出我们跟踪的会话trace信息,则就要结合使用另一个oracle提供的系统级别命令trcsess。比如:
---------------------------------------------------------------------------------------------------
使用dbms_monitor包激活trace
SQL> exec dbms_monitor.session_trace_enable(session_id => 1037,serial_num => 340,waits => true,binds => false);

获取跟踪会话的trc文件,使用命令如下:
[dwtest1$]/oracle>trcsess utput=test.trc session=1037.340

使用tkprof命令进行格式化
[dwtest1$]/oracle>tkprof test.trc test.txt


注意:trcsess命令的session参数必须是session_id.serial_num形式

---------------------------------------------------------------------------------------------------

tkprof输出的文件格式非常规整,看起来也很方便,你可以看到跟踪会话里执行的sql语句,常见的统计信息,执行计划以及waits events等等,很方便很强大!对于问题sql或是等待事件的调优或诊断,简直是杀人越货之必备工具。

tkprof另外一个方便之处提供了众多的参数,你可以将trc文件按照你的需求生成报告,比如按照执行次数或是cpu time等排序。

详细参考:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/sqltrace.htm#i18143

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

下一篇: 组合索引顺序
请登录后发表评论 登录
全部评论

注册时间:2008-03-12

  • 博文量
    77
  • 访问量
    752059