sql_trace/10046事件数据库诊断

sql_trace/10046事件是oracle提供的用于进行sql跟踪的手段,其内容包括sql的解析过程、sql的执行计划、绑定变量的使用、会话发生的等待事件,10046事件是oracle 的内部事件,是对sql_trace的加强。

   


规范的10046/sql_trace event 使用方法
alter session set tracefile_identifier='10046';
alter session set timed_statistics = true;
alter session set statistics_level=all;
alter session set max_dump_file_size = unlimited;
alter session set events '10046 trace name context forever,level 12';  

alter session set events '10046 trace name context forever,level 12';---需要用户有alter session 权限


   

sql_trace的作用域:

    1)对所有用户:

        i)在参数文件中指定sql_trace=true

       ii)alter system set sql_trace=true/false

    2) 对当前用户:

        启用当前session的跟踪:alter session set sql_trace=true;

        结束跟踪:alter session set sql_trace=false;

    3)对其他用户:

        选择跟踪的进程(用户)

  1. sys@ORCL> select sid,serial#,username from v$session where username is not null;  
  2.   
  3.        SID    SERIAL# USERNAME  
  4. ---------- ---------- ------------------------------  
  5.        142         14 HR  
  6.        159          5 SYS  


        设置跟踪:

  1. sys@ORCL> exec dbms_system.set_sql_trace_in_session(142,14,true)   
  2.   
  3. PL/SQL procedure successfully completed.  


        停止跟踪:

  1. sys@ORCL> exec dbms_system.set_sql_trace_in_session(142,14,false)  
  2.   
  3. PL/SQL procedure successfully completed.  


    *************************************↖(^ω^)↗**********************************

    10046事件是对sql_trace的增强,可分4个级别,具体如下:

    1)level 1:等价于sql_trace

    2)level 4:level 1+绑定值

    3)level 8:level 1+等待事件跟踪

    4)level 12:等价于level 1+level 4+level 8



10046事件的作用域:

    1)对所有用户

        i)在参数文件中修改:event=“10046 trace name context forever,level 12”

       ii)alter system set events ‘10046 trace name context forever,level 8';

            / alter system set events '10046 trace name context off';

    2)对当前用户

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

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

    3)对其他用户

        查询要跟踪的对象

  1. sys@ORCL> select sid,serial#,username from v$session where username is not null;  
  2.   
  3.        SID    SERIAL# USERNAME  
  4. ---------- ---------- ------------------------------  
  5.        142         14 HR  
  6.        159          5 SYS  


        执行跟踪

  1. sys@ORCL> exec dbms_system.set_ev(142,14,10046,8,'hr');  
  2.   
  3. PL/SQL procedure successfully completed.  


        结束跟踪

  1. sys@ORCL> exec dbms_system.set_ev(142,14,10046,0,'hr');  
  2.   
  3. PL/SQL procedure successfully completed.  


 

    *********************************~(@^_^@)~*************************************

    由于trace文件的格式比较难以阅读,我们可以通过TKPROF工具进行格式化,最终生成符合我们阅读习惯的sql trace 文件。

    格式如下:

    tkprof  tracefile  outputfile  [options]

    其中,option选项的说明和使用,我们可以通过在bash环境罗列:

  1. [oracle@localhost ~]$ tkprof  
  2. Usage: tkprof tracefile outputfile [explain= ] [table= ]  
  3.               [print= ] [insert= ] [sys= ] [sort= ]  
  4.   table=schema.tablename   Use 'schema.tablename' with 'explain=' option.  
  5.   explain=user/password    Connect to ORACLE and issue EXPLAIN PLAN.  
  6.   print=integer    List only the first 'integer' SQL statements.  
  7.   aggregate=yes|no  
  8.   insert=filename  List SQL statements and data inside INSERT statements.  
  9.   sys=no           TKPROF does not list SQL statements run as user SYS.  
  10.   record=filename  Record non-recursive statements found in the trace file.  
  11.   waits=yes|no     Record summary for any wait events found in the trace file.  
  12.   sort=option      Set of zero or more of the following sort options:  
  13.     prscnt  number of times parse was called  
  14.     prscpu  cpu time parsing  
  15.     prsela  elapsed time parsing  
  16.     prsdsk  number of disk reads during parse  
  17.     prsqry  number of buffers for consistent read during parse  
  18.     prscu   number of buffers for current read during parse  
  19.     prsmis  number of misses in library cache during parse  
  20.     execnt  number of execute was called  
  21.     execpu  cpu time spent executing  
  22.     exeela  elapsed time executing  
  23.     exedsk  number of disk reads during execute  
  24.     exeqry  number of buffers for consistent read during execute  
  25.     execu   number of buffers for current read during execute  
  26.     exerow  number of rows processed during execute  
  27.     exemis  number of library cache misses during execute  
  28.     fchcnt  number of times fetch was called  
  29.     fchcpu  cpu time spent fetching  
  30.     fchela  elapsed time fetching  
  31.     fchdsk  number of disk reads during fetch  
  32.     fchqry  number of buffers for consistent read during fetch  
  33.     fchcu   number of buffers for current read during fetch  
  34.     fchrow  number of rows fetched  
  35.     userid  userid of user that parsed the cursor  


    我们通过一个例子来介绍对tkprof的使用:

  1. <p>SQL> show parameter timed_statistics</p><p>NAME                                 TYPE        VALUE  
  2. ------------------------------------ ----------- ------------------------------  
  3. timed_statistics                     boolean     TRUE  
  4. SQL> show parameter max_dump_file_size</p><p>NAME                                 TYPE        VALUE  
  5. ------------------------------------ ----------- ------------------------------  
  6. max_dump_file_size                   string      UNLIMITED  
  7. </p>  
  1. sys@ORCL> alter session set sql_trace=true;  
  2.   
  3. sys@ORCL> select * from hr.departments;   
  4.   
  5. sys@ORCL> alter session set sql_trace=false--最好是关闭跟踪,减小对性能的开销  
  6.   
  7. sys@ORCL> exit;  --在运行完查询后,要退出sql*plus(断开连接),这样才能完全关闭跟踪文件,使trace文件的所有信息都是有效的。  

 

    然后,我们就可以使用tkprof:

  1. [oracle@localhost ~]$ tkprof /u01/app/oracle/admin/orcl/udump/orcl_ora_5467.trc tkprof_think.txt  
  2.   
  3. TKPROF: Release 10.2.0.1.0 - Production on Fri Jul 27 11:18:13 2012  
  4.   
  5. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  6.   
  7.   
  8. [oracle@localhost ~]$ ls  
  9. tkprof_think.txt  
  10.   



----转自

http://blog.youkuaiyun.com/linwaterbin/article/details/7792148

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值