Sql_trace ,timed_statistic,tkprof是Oracle性能调整中的重要工具,sql_trace可以记录应用程序中每一个sql的执行情况数据统计,timed_statistic能够告诉我们每一个执行步骤花费的cpu时间,tkprof可以将sql_trace生成的跟踪文件转换成更便于我们阅读的格式。
Timed_statistics可以设置成系统级别的也可以针对单个会话进行设置,可以在init.ora参数文件中添加
Timed_statistics = true重启数据库即生效、
针对单个会话设置
Alter session set timed_statistics = true;
针对整个系统设置,和在参数文件中设置等效
Alter system set timed_statistics = true;
Sql_trace也可针对整个数据库和单个会话进行跟踪生成跟踪文件,路径为
%oracle_home%\admin\oracle_sid\udump
Alter session set sql_trace=true|false
Sys.dbms_system.set_sql_trace_in_session该方法需要配置三个参数sid,serial#,这两个参数可以通过v$session视图获得,选择我们要跟踪的会话的sid,serial#参数,
例如
//exec dbms_system.set_sql_trace_in_session(sid,serial#,true)
//exec dbms_monitor.session_trace_enable(267,996,waits=>true,binds=>true)//可以获取更多信息
exec dbms_system.set_sql_trace_in_session(9,437,true)
停止跟踪
exec sys.dbms_system.set_sql_trace_in_session(9,437,false)
还可以通过设置事件的方式
Alter session set events ‘10046 trace name context forever,level 12’;
关闭跟踪
Alter session set events ‘10046 trace name context off’;
如何得到跟踪文件名
如果会话取得自己的跟踪文件
可以用下面的方法获得
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# =1and s.sid = m.sidand p.addr = s.paddr) p,
( select t.instancefrom sys.v$thread t,sys.v$parameter v
where v.name ='thread'and (v.value =0or t.thread# = to_number(v.value))) i,
( selectvaluefrom sys.v$parameter wherename ='user_dump_dest') d
/
如果以sys账户登录oracle并用
exec dbms_system.set_sql_trace_in_session(9,437,true)
跟踪其它会话时跟踪文件可以用下面的语句得到跟踪文件名
select a.spid from v$process a,v$session b
where a.addr=b.paddr and
b.username='其它会话用户名(要大写)'
/
得到结果是
SPID
----------
3220
跟踪文件路径上面已经提到