在实际工作中,我们经常发现系统比较慢,但是具体原因不清楚,需要我们跟踪到数据库内部看到底执行了什么,这就需要我们使用trace文件,下面是我自己总结的一点tip。
应用场景一:知道某个用户,想跟踪这个用户的操作
1.找到SID和serial#
select * from v$session 根据machine program type找个这个用户的sid,serial#
2.找到trace文件路径
根据v$session的paddr找对对应的v$process的addr
select tracefile from v$process where addr='4D3CD904'
3.开启trace
exec dbms_monitor.session_trace_enable(sid,serial#)
4.开启文件输出
alter session set sql_trace=true;
5.session操作,让客户端执行一些操作
6.检查文件是否存在,oracle11g默认在/opt/oracle/diag/rdbms/orcl/orcl/trace/
也可以查询select * from v$diag_info where name='Default Trace File';
获取默认路径地址
7. 关闭trace
alter session set sql_trace=false;
exec dbms_monitor.session_trace_enable(sid,serial#,false);
8.tkprof格式化输出
在trace文件路径下可以执行tkprof dbname_ora_2000.trc /opt/out/traceview.txt
tkprof存在$ORACLE_HOME/bin下,如果没有配置环境变量需要注意
tkprof colm_ora_2056.trc /opt/out/trace.txt print=100 record=/opt/out/sql.txt sys=yes
应用场景二:如果系统负载比较高,想找到负载重的进程到底做了什么,可以按如下操作
1.例如首先从os上利用top命令找到当前占用cpu资源最高的一个进程的PID号9999;
2.数据库中根据PID号找到相应的sid和serial#
select s.sid,s.serial# from v$session s,v$process p where s.paddr=p.addr and p.spid='9999';
3.开启trace和文件输出,后面就一样操作了。
trprof参数:
tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ]
<1>table=schema.tablename Use 'schema.tablename' with 'explain=' option.
用于指定在将执行规划写进输出文件之前,TKPROF用于临时存放执行规划所用表的架构和名称
<2>explain=user/password Connect to ORACLE and issue EXPLAIN PLAN.
<3>print=integer List only the first 'integer' SQL statements.
只列出输出文件中的第一个INTEGER的SQL语句,若忽略,则TKPROF将列出所有跟踪的SQL语句
<4>aggregate=yes|no
若用户指定AGGREGATE=NO,TKPROF将不会对相同SQL文本的多个用户进行汇总
<5>insert=filename
List SQL statements and data inside INSERT statements.
SQL脚本的一种,用于将跟踪文件的动机信息存储到数据库中
<6>sys=yes/no
TKPROF does not list SQL statements run as user SYS.
用于启动或禁止将用户SYS所发布的SQL语句列表到输出文件之中,也包括递归SQL(为执行用户的SQL语句,ORACLE还必须执行一些附加语句)语句在内。默认为YES
<7>record=filename
Record non-recursive statements found in the trace file.
对于跟踪文件中的所用非递归SQL语句,TKPROF 将以指定的名称来创建某个SQL脚本。用于对跟踪文件中的用户时间进行重放
<8>aits=yes|no
Record summary for any wait events found in the trace file.
<9>sort=option
Set of zero or more of the following sort options:
在将被跟踪的SQL语句列表输出到跟踪文件之前,先将其按照指定排序选项的降序关系对其进行排序;若指定了多种排序选项,那么根据排序选项所指定值的和的降序关系对其进行排序;若忽略此参数,那么TKPROF将按照使用次序把语句列表到输出文件中