1:设置sql_trace
SQL>alter session set sql_trace=true; 或者 SQL> alter database set sql_trace=true;
2:设置trace文件
SQL> alter session set tracefile_identifier='赵海军';
或者查询默认的trace文件
SELECT D.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' || P.SPID || '.trc' AS "trace_file_name" FROM (SELECT P.SPID FROM V$MYSTAT M, V$SESSION S, V$PROCESS P WHERE M.STATISTIC# = 1 AND S.SID = M.SID AND P.ADDR = S.PADDR) P, (SELECT T.INSTANCE FROM V$THREAD T, V$PARAMETER V WHERE V.NAME = 'thread' AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))) I, (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'user_dump_dest') D;
3:执行sql语句
UPDATE WF_DOC_GW SET DMODIFYDATE=SYSDATE,NMODIFYID=188503,NSTATE=1 WHERE NDOCID=101392903
4:结束sql_trace
SQL> alter session set sql_trace=false;
5:格式化trace文件
c:>tkprof trace.txt trace1.txt sys=no; 参数:可以在命令行下输入tkprof,会显示所有的参数说明 aggregate=yes|no 默认情况下,tkprof工具将所有相同的SQL在输入文件中做合并,如果设置为no,则分别列出每个SQL的信息。一般合并后看起来比较简洁,如果需要查看每一个SQL单独的信息,可以把aggregate设置为no。
6:原始trace文件可读性差,以下是一些参数说明
PARSING IN CURSOR 部分:
Len: 被解析SQL的长度
Dep: 产生递归SQL的深度
Uid:user id
Otc: Oracle command type 命令的类型
Lid: 私有用户id
Tim:时间戳
Hv: hash value
Ad:SQL address
PARSE,EXEC,FETCH 部分
C: 消耗的CPU time
E:elapsed time 操作的用时
P: physical reads 物理读的次数
Cr: consistent reads 一致性方式读取的数据块
Cu:current 方式读取的数据块
Mis:cursor misss in cache 硬分析次数
R: -rows 处理的行数
Dep: depth 递归SQL的深度
Og: optimizer goal 优化器模式
Tim:timestamp时间戳
STATS 部分:
Id: 执行计划的行源号
Cnt:当前行源返回的行数
Pid:当前行源号的父号
Pos:执行计划中的位置
Obj:当前操作的对象id(如果当前行原始一个对象的话)
Op:当前行源的数据访问操作
参考:http://blog.csdn.net/tianlesoftware/article/details/5857023