博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Oracle 课程八之性能优化之10046事件

Posted on 2014-01-25 16:27  徐正柱-  阅读(1002)  评论(0编辑  收藏  举报

Oracle 的事件很多。 具体参考blog:

Oracle 跟踪事件 set event

转摘:http://blog.csdn.net/tianlesoftware/archive/2009/12/13/4977827.aspx

10046 事件主要用来跟踪SQL语句,它并不是ORACLE 官方提供给用户的命令,在官方文档上也找不到事件的说明信息。 但是用的却比较多,因为10046事件获取SQL的信息比SQL_TRACE 更多。 更有利于我们对SQL的判断。 

10046 事件按照收集信息内容,可以分成4个级别:
Level 1: 等同于SQL_TRACE 的功能
Level 4: 在Level 1的基础上增加收集绑定变量的信息
Level 8: 在Level 1 的基础上增加等待事件的信息
Level 12:等同于Level 4+Level 8, 即同时收集绑定变量信息和等待事件信息。

 

1 对当前session 使用10046事件

SQL>alter session set events '10046 trace name context forever, level 12'; --启动10046事件
执行相关事务
SQL>alter session set events '10046 trace name context off'; -- 关闭10046事件

该事件收集的信息也是放在trace文件中,查看trace文件的方法,参考性能优化之SQL TRACE的TKPROF 工具。

 

2.对其他的会话进行跟踪

   之前说的都是对当前session进行跟踪,在生产环境中,可能需要对其他session进行跟踪,有如下2种方法:

2.1  用SQL_TRACE跟踪

--第一步:查询SID信息

SQL> select sid,serial# from v$session where SID=267;

       SID    SERIAL#

---------- ----------

       267        996

 --第二步:启动SQL_TRACE

SQL> execute dbms_system.set_sql_trace_in_session(267,996,true);  -- 启动SQL_TRACE

PL/SQL 过程已成功完成。

--第三步: 关闭SQL_TRACE

SQL> execute dbms_system.set_sql_trace_in_session(267,996,false); -- 关闭SQL_TRACE

PL/SQL 过程已成功完成。

 

2.2 使用10046 事件跟踪

SQL> exec dbms_monitor.session_trace_enable(267,996,waits=>true,binds=>true);  -- 启动trace

PL/SQL 过程已成功完成。

SQL> exec dbms_monitor.session_trace_disable(267,996); -- 关闭trace

PL/SQL 过程已成功完成。

注意:

  如果一条SQL语句中包含了通过DBLINK进行的数据操作,我们想对这条SQL进行trace跟踪,在本地只能够trace到本地执行的SQL信息,而对于远程的SQL语句,由于它运行在远端的数据库上,我们要获得它的信息,需要到远端的数据库上,找到运行这条SQL语句的session,然后对它做Trace。 另外,这条SQL语句的执行计划也只能从远端数据库上捕获到。