sql_trace在oracle中的应用
SQL_TRACE在ORACLE系统中的性能调整中发挥着重大作用,它是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。
启用SQL_TRACE的方法:
一、系统全局级使用
参数文件spfile中设置 sql_trace =true,这将使所有会话启用SQL跟踪,因为它会产生好多输出,所以对系统性能产生很大影响,较少用。
二、会话级使用
1、 alter session set sql_trace=true;
2、 sys.dbms_system.set_sql_trace_in_session
例如: exec dbms_system.set_sql_trace_in_session(9,437,true)
3、 alter session set events
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
例如:
alter session set events '10046 trace name context forever, level 8';
alter session set events '10046 trace name context off';
类似sql_trace,10046事件可以在全局设置event="10046 trace name context forever,level 12",也可以在session级设置。
三、文件保存路径
跟踪文件位于user_dump_dest目录中,位置及文件名可以通过以下SQL查询获得
SELECT d.VALUE
|| '/'
|| LOWER (RTRIM (i.INSTANCE, CHR (0)))
|| '_ora_'
|| p.spid
|| '.trc' trace_file_name
FROM (SELECT p.spid
FROM SYS.v$mystat m, SYS.v$session s, SYS.v$process p
WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,
(SELECT t.INSTANCE
FROM SYS.v$thread t, SYS.v$parameter v
WHERE v.NAME = 'thread'
AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,
(SELECT VALUE
FROM SYS.v$parameter
WHERE NAME = 'user_dump_dest') d
四、跟踪文件的阅读
1、 tkprof 格式化输出。tkprof的结果是不包含绑定变量值的,同时也不包括真正的SQL执行顺序,而trace文件中我们则可以看到按照时间排列的parse,binds,executes,fetch等等,这在某西场合下是很有用处的。
例如:tkprof orcl_ora_14483.trc allan.txt
2、 直接阅读。