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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/386081/viewspace-557953/