10046事件小结

一、10046事件相关参数

该事件需要设置一些参数以控制dump文件的输出:

  
  TIMED_STATISTICS:
    用于控制计时信息,可以设定为true和false。当设定为true时,计时信息将会被添加到trace文件中。
  
  MAX_DUMP_FILE_SIZE
    用于控制trace文件的最大尺寸。当使用10046事件时,建议将该参数设定为unlimited。
  
  USER_DUMP_DEST
    用于设定trace文件写入到哪个文件目录
  
  STATISTICS_LEVEL
    用于控制统计信息的收集度。此参数有3个选择,baisc,typical,all。
    basic:仅收集满足trace所需的最基本的信息,象Timed statistics,Object level statistics,以及一些advisory会被忽略。
    typical:此为缺省值。此设置将在basic的基础上增加一些额外的统计信息,象操作系统耗用时间的统计信息,执行计划的统计信息都会被收集
    all:当设置为all时,所有与该session相关的信息全部会被收集。
  
  TRACEFILE_IDENTIFIER
    用于设置识别Trace文件的字符串,便于更快捷的找到生成的Trace文件。

  以上参数可以基于系统级别以及会话级别进行修改。
    ALTER SESSION/SYSTEM SET timed_statistics=true
    ALTER SESSION/SYSTEM SET max_dump_file_size=unlimited
    ALTER SESSION SET tracefile_identifier='trace_sql_example'   -->仅session级别
    
  为特定的session动态设定trace相关参数,借助DBMS_SYSTEM包
     sys.DBMS_SYSTEM.set_bool_param_in_session( &sid
                                              , &serial
                                              , 'timed_statistics'
                                              , TRUE );
     sys.DBMS_SYSTEM.set_int_param_in_session( &sid
                                             , &serial
                                             , 'max_dump_file_size'
                                             , 2147483647 );  
  

二、调试事件等级


  10046调试事件可以分为多个不同的等级,不同的等级输出不同的trace信息。
  等级   作用
  0      禁止调试事件
  1      调试事件处于激活状态。针对每个被处理的数据库调用,输出SQL语句,APPNAME(应用程序名),PARSING IN CURSOR,PARSE ERROR(SQL解析)
      ,EXEC(执行),FETCH(获取数据),UNMAP,SORT UNMAP(排序,临时段),ERROR,STAT(执行计划),XCTEND(事务)等行。
  4      包括等级1的输出,加上BIND行(绑定变量信息)
  8      包括等级1的输出,加上WAIT行(等待事件信息)。对于处理过程中的每个等待,提供如下信息:等待时间的名字,持续时间,以及一些额外
         的参数,可表明所等待的资源。
  12     输出等级4以及等级8的所有信息

三、10046事件的开启和关闭

有几种方式来启用10046事件:

一种是在当前会话启用event,可以利用alter session + 事件名称 + level,如:sql>alter session set event ‘10046 trace name context forever, level 12’;


另外一种是启用别的会话进行event跟踪,可以利用oracle提供的dbms_system来完成。如:sql>exec dbms_system.set_ev(sid,serial#,10046,12,’’);

注意:sql>exec dbms_system.set_sql_trace_in_session(sid,serial#,true);相当于打开了sql_trace


event的关闭:

可以在通过下面的语句来关闭当前会话的eventsql>alter session set event ‘10046 trace name context off’;
也可以利用dbms_system包来关闭某个会话的eventsql>execute dbms_system.set_ev(sid,serial#,0,’’);


这里应当值得一提的是,TRACE将消耗相当的系统资源,因此我们在使用TRACE的时候应当慎重。对于正式的系统,应当只在必要的时候进行TRACE操作,并且应当及时关闭。

当利用事件trace完当前或某个session后,接下来我们的工作就是找到oracle生成的trace了。Oracle的初始化文件中user_dump_dest参数的设置将决定trace文件的生成位置。


trace文件中查找和发现有用的信息,然后寻找必要的性能调整点并进行相应的调整:

大部分情况下,通过10046事件trace到文件里的信息包含了此会话中存在的性能问题,可以根据trace到的等待事件、SQL语句执行情况以及绑定变量的使用情况来进行分析和查找。


oracle提供了一个工具tkprof来对trace文件进行格式的翻译,以便trace文件中记录的信息能够被我们容易掌握和获取。基本用法:

 tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ]
   table=schema.tablename   Use 'schema.tablename' with 'explain=' option.
   explain=user/password    Connect to ORACLE and issue EXPLAIN PLAIN.
   print=integer    List only the first 'integer' SQL statements.
   aggregate=yes|no
   insert=filename  List SQL statements and data inside INSERT statements.
   sys=no           tkprof does not list SQL statements run as user SYS.
   record=filename  Record non-recursive statements found in the trace file.
   sort=option      Set of zero or more of the following sort options:
     prscnt  number of times parse was called
     prscpu  cpu time parsing
     prsela  elapsed time parsing
     prsdsk  number of disk reads during parse
     prsqry  number of buffers for consistent read during parse

 例:

[oracle@bbs]$ tkprof D:oracleadminora9iudumpora9i_ora_2060.trc d:report.txt

小知识:检查当前会话的sql_trace状态或级别:

SQL>set serveroutput on

1 declare i_event number;

2 begin

  3 sys.dbms_system.read_ev(10046,i_event);

  4 dbms_output.put_line(‘the session sql_trace level is: ‘||i_event);

  5 end;

6 /

the session sql_trace level is: 12


PL/SQL 过程已成功完成。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16705111/viewspace-731908/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16705111/viewspace-731908/

你可能感兴趣的:(10046事件小结)