« sqlplus 中显示时间 | (回到Blog入口) | 关于压力测试 »

使用trace跟踪sql执行情况

1.跟踪自己的session

  • alter session set events '10046 trace name context forever, level 12';

  • 执行需要跟踪的sql....

  • alter session set events '10046 trace name context off';

  • 查看trace文件名字:

  • select d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' 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
  • 分析结果 tkprof tracefilename outputfilename

  • 例子

  • SQL> set time on
    22:43:26 SQL> set timing on
    22:43:28 SQL> alter session set events '10046 trace name context forever,level 12';

    会话已更改。

    已用时间: 00: 00: 00.00
    22:43:39 SQL> declare
    22:44:03 2 v_num integer;
    22:44:03 3 begin
    22:44:03 4 v_num := 0;
    22:44:03 5 while v_num < 10000
    22:44:03 6 loop
    22:44:03 7 insert into t2 values(v_num,'def');
    22:44:03 8 v_num := v_num + 1;
    22:44:03 9 end loop;
    22:44:03 10 commit;
    22:44:03 11 end;
    22:44:03 12 /

    PL/SQL 过程已成功完成。

    已用时间: 00: 00: 01.18
    22:44:06 SQL> alter session set events '10046 trace name context off';

    会话已更改。

    已用时间: 00: 00: 00.02
    22:44:28 SQL> select d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'
    ||p.spid||'.trc' trace_file_name
    23:02:28 2 from ( select p.spid from v$mystat m,v$session s,v$process
    p
    23:02:28 3 where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
    23:02:28 4 ( select t.instance from v$thread t,v$parameter v
    23:02:28 5 where v.name = 'thread' and (v.value = 0 or t.thread# = to_num
    ber(v.value))) i,
    23:02:28 6 ( select value from v$parameter where name = 'user_dump_dest
    ') d
    23:02:29 7
    23:02:30 SQL> /

    TRACE_FILE_NAME
    --------------------------------------------------------------------------------

    D:ORACLEPRODUCT10.2.0ADMINORCLUDUMP/orcl_ora_2536.trc

    D:oracleproduct10.2.0adminorcludump>tkprof orcl_ora_2536 lyf3.txt

    TKPROF: Release 10.2.0.1.0 - Production on 星期日 10月 8 22:39:36 2006

    Copyright (c) 1982, 2005, Oracle. All rights reserved.

    D:oracleproduct10.2.0adminorcludump>

    2.了解raw trace的更多内容

    可以参看

    3. 3. 跟踪其他用户进程
    在很多时候我们需要跟踪其他用户的进程,而不是当前用户,这可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION
    来完成

    SET_SQL_TRACE_IN_SESSION过程序要提供三个参数:

    SQL> desc dbms_system

    PROCEDURE SET_SQL_TRACE_IN_SESSION
    Argument Name Type In/Out Default?
    ------------------------------ ----------------------- ------ --------
    SID NUMBER IN
    SERIAL# NUMBER IN
    SQL_TRACE BOOLEAN IN

    通过v$session我们可以获得sid、serial#等信息:

    获得进程信息,选择需要跟踪的进程:

    SQL> select sid,serial#,username from v$session where username is not null;

    SID SERIAL# USERNAME
    ---------- ---------- ------------------------------
    10 617 LYF
    11 18 SYS

    设置跟着:
    SQL> exec dbms_system.set_sql_trace_in_session(10,617,true);

    PL/SQL 过程已成功完成。

    ….
    可以等候片刻,跟踪session执行任务,捕获sql操作…
    在10,617上执行insert into t2 values('cc');

    ….

    停止跟踪
    SQL> exec dbms_system.set_sql_trace_in_session(10,617,false);

    PL/SQL 过程已成功完成。

    到udump目录下,按照日期排序可以看到新生成的文件。


    --------

    引用通告

    TrackBack URL for this entry:
    如果您想引用这篇文章到您的Blog,
    请复制下面的链接,并放置到您发表文章的相应界面中。
    http://www.fengshanjian.net/cgi-bin/mt/mt-tb.cgi/6

    发表一个评论

    (如果你此前从未在此 Blog 上发表过评论,则你的评论必须在 Blog 主人验证后才能显示,请你耐心等候。)

    关于

    此页面包含了发表于2006年10月08日 上午09时10分的 Blog 上的单篇日记。

    此 Blog 的前一篇日记是 sqlplus 中显示时间

    此 Blog 的后一篇日记是 关于压力测试

    更多信息可在 主索引 页和 归档 页看到。

    Powered by
    Movable Type 3.34