sql_trace(二)

sql_trace是oracle提供的一个非常好的跟踪工具,主要用来检查数据库的异常情况,通过跟踪数据库的活动,找到有问题的语句。

一、概述:
      SQL_TRACE是Oracle的一个非常强大的工具。打开SQL_TRACE就可以逐步捕获任何一个会话的数据库活动,或者捕获整个数据库的活动,并将数据库活动记录成跟踪文件。每次使用完之后需要关闭跟踪,否则会降低系统的性能。

二、用法:
1、文件跟踪的分类:
可以采用两种方式进行跟踪:
(1) 跟踪整个数据库实例:只需要简单的修改参数文件(pfile/spfile)参数 SQL_TRACE = TRUE,然后重新启动数据库即可。在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这样也会数据库导致性能下降比较明显。
(2)会话级跟踪:SQL_TRACE的通常使用方式是仅跟踪一个会话。被跟踪的会话可以是您自己的,也可以是其它用户的会话。如果是自己的会话,只需要在SQL*PLUS中运行一下命令即可:
          SQL> alter session set sql_trace = true;
          类似的如果取消对会话的跟踪,运行一下命令:
          SQL> alter session set sql_trace = false;
       
          如果需要跟踪一个特定的会话,首先需要获取会话的SID和Serial#,这些信息可以在视图V$SESSION中获得,一旦知道了这两个参数,就可以运行一下命令:
          SQL> execute SYS.dbms_system.set_sql_trace_in_session(13,9,true);
          同样也可以使用这个过程关闭会话跟踪:
          SQL> execute SYS.dbms_system.set_sql_trace_in_session(13,9,false);
 
2、跟踪文件的位置:
        一旦为会话激活了SQL_TRACE,ORACLE就会在udump管理区创建跟踪文件,文件的目标位置由参数user_dump_dest来确定。每个操作都不会覆盖原来的文件,新的跟踪记录将会被追加到文件末尾。通常情况下,可以根据文件的修改时间判断目录下哪个文件是最新的文件。
    SQL> show parameter user_dump_dest;
 
    NAME                                                                TYPE              VALUE
    ------------------------------------ ----------- ------------------------------
    user_dump_dest                                            string          d:\oracle\admin\ora9i\udump
 
    也可以通过以下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 ;

    TRACE_FILE_NAME
    --------------------------------------------------------------------------------
 
    d:oracleadminora9iudumpora 9i_ora_2060.trc  
 
3、计时信息:
      为了最大限度的利用跟踪文件,应该打开计时标志,通过参数TIMED_STATISTICTS=TRUE进行设置,这样可以对每个SQL语句的执行时间等进行记录,这个功能对系统性能的负担很小。
      打开会话的计时信息:
      SQL> alter session set timed_statistics = true ;
      打开数据库系统的计时信息
      SQL> alter system set timed_statistics = true ;
 
 4、TKPROF:
      通过前三步的设置已经知道如何生成SQL跟踪文件了,ORACLE生成的跟踪文件阅读起来很困难(也就是易读性很差),可以看跟踪文件的一部分,执行以下SQL语句:
    SQL> select count(*) from sys_dept;
 
      COUNT(*)
    ----------
                  16   
    执行完后,查看跟踪文件中这个语句的内容如下:
   
      PARSING IN CURSOR #1 len=31 dep=0 uid=62 oct=3 lid=62 tim=14727407741 hv=2200985491 ad='128e3820'
    select count(*) from sys_dept
    END OF STMT
    PARSE #1:c=0,e=16348,p=1,cr=31,cu=0,mis=1,r=0,dep=0,og=4,tim=14727407735
    EXEC #1:c=0,e=24,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727407814
    FETCH #1:c=0,e=15641,p=5,cr=7,cu=0,mis=0,r=1,dep=0,og=4,tim=14727423807
    =====================
    PARSING IN CURSOR #2 len=61 dep=0 uid=62 oct=47 lid=62 tim=14727508742 hv=3517412409 ad='12bbcff4'
    begin :id := sys.dbms_transaction.local_transaction_id; end;
    END OF STMT
    PARSE #2:c=0,e=122,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727508735
    EXEC #2:c=0,e=144,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=4,tim=14727508945
    =====================
    PARSING IN CURSOR #2 len=61 dep=0 uid=62 oct=47 lid=62 tim=14727587562 hv=3517412409 ad='12bbcff4'
    begin :id := sys.dbms_transaction.local_transaction_id; end;
    END OF STMT
    PARSE #2:c=0,e=121,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727587556
    EXEC #2:c=0,e=97,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=4,tim=14727587721
 
    这样不仅阅读麻烦,并且也有很多内容难以理解。ORACLE提供了一个格式化跟踪文件的工具 - TKPROF( Transient Kernel Profiler ),通过这个工具能将SQL文件转化为分析人员容易理解的格式。
   
      一般TKPROF工具的使用的简单方法,只用到了两个关键字:跟踪文件名和输出文件名 (TKPROF的具体请参阅其他资料):
      TKPROF
   
      在命令行模式下运行(数据库在window2000下安装的)
      C:>tkprof D:\oracle\admin\ora9i\udump\ora9i_ora_2060.trc d:\report.txt
   
      执行完后,在reprot.txt中查询刚才的语句内容如下:
      select count(*)
    from
    sys_dept
 
 
    call        count            cpu      elapsed            disk          query      current              rows
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    Parse                      0.00            0.01                                31                                    0
    Execute                  0.00            0.00                                                                    0
    Fetch                      0.00            0.01                                                                    1
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    total                      0.00            0.03                                38                                    1
 
    Misses in library cache during parse: 1
    Optimizer goal: CHOOSE
    Parsing user id: 62       
 
    通过设置tkprof的关键字[EXPLAIN = ],也可以在跟踪文件中增加SQL语句的执行计划:
  C:>tkprof D:\oracle\admin\ora9i\udump\ora9i_ora_2060.trc d:\report.txt explain=test/test;  
 
  ********************************************************************************
 
  select count(*)
  from
    sys_dept
 
 
  call        count            cpu      elapsed            disk          query      current              rows
  ------- ------  -------- ---------- ---------- ---------- ----------  ----------
  Parse                      0.00            0.01                                31                                    0
  Execute                  0.00            0.00                                                                    0
  Fetch                      0.00            0.01                                14                                    2
  ------- ------  -------- ---------- ---------- ---------- ----------  ----------
  total                      0.00            0.03                                45                                    2
 
  Misses in library cache during parse: 1
  Optimizer goal: CHOOSE
  Parsing user id: 62
 
  Rows        Row Source Operation
  -------  ---------------------------------------------------
              SORT AGGREGATE
            16    TABLE ACCESS FULL SYS_DEPT

转自:http://blog.sina.com.cn/s/blog_44a8224701000ad5.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值