10046事件是SQL_TRACE的扩展,被戏称为"吃了兴奋剂的SQL_TRACE"
       有效的追踪级别:
       
       ① 0级:SQL_TRACE=FASLE
       ② 1级:SQL_TRACE=TRUE,这是缺省级别
       ③ 4级:1级+绑定变量
       ④ 8级:4级+等待事件
       ⑤ 12级:4级+8级
       
       对于4级的10046,若用tkprof格式化,则会隐藏每一点SQL语句在做什么以及怎么做
       对于8级的10046,等待事件散得到处多是,此时我们不妨用tkprof对等待事件进行汇总
       所以,理解扩展SQL跟踪文件的格式,是每一个面临性能问题或故障排除任务的DBA的必备技能
          
       ㈠ 为什么需要10046?
     
          对一个拥有alter session权限但是没有被授权DBA角色的数据库用户
          alter session set events是在他自己会话中启动扩展SQL跟踪的唯一方法
          通过这种方法将等待事件或者绑定变量包含在SQL跟踪文件中,然后进行优化或者错误诊断    
          10046 看到语句的执行过程,知道语句的执行计划,包括各种步骤,关联方式,分别在哪些步骤耗时多少,有哪些等待事件等
          这些都是优化的基础,知道这些,就知道该如何优化以及troubleshoting
          
       
     
       ㈡ 如何获取trc文件?


          这里主要介绍3种方法
          
          ① 使用tracefile_identifier,比如:
             alter session set tracefile_identifier=\'Think\'

② oradebug,详细请请参看Think之前的一篇博客:oradebug

③ 使用下面的脚本:

hr@ORCL> ed
Wrote file afiedt.buf 1 select
2 d.value||\'/\'||lower(rtrim(i.instance, chr(0)))||\'_ora_\'||p.spid||\'.trc\' trace_file_name
3 from
4 ( select p.spid
5 from v$mystat m,v$session s,v$process p
6 where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
7 ( select t.instance from v$thread t,v$parameter v
8 where v.name = \'thread\' and (v.value = 0 or t.thread# = to_number(v.value))) i,
9* ( select value from v$parameter where name = \'user_dump_dest\') d
hr@ORCL> / TRACE_FILE_NAME
-----------------------------------------------------------------
/u01/app/oracle/admin/orcl/udump/orcl_ora_4012.trc

㈢ 如何读懂10046事件的文件?
       
       ① 数据库调用

       
       含3个子分类:解析,执行和获取
       这3个分类与通过调用DBMS_SQL的子例程DBMS_SQL.PARSE,DBMS_SQL.EXECUTE,DBMS_SQL.FETCH_ROWS来跑SQL的步调相一致
       
       解析
       解析在跟踪文件中通常通过两个相邻的条目表示
       第一个是PARSING IN CURSOR,第二个是PARSE

PARSING IN CURSOR #9 len=28 dep=0 uid=55 oct=2 lid=55 tim=1327904235010505 hv=119728103 ad=\'2fc6ae84\'
insert into t values(\'ooxx\')
END OF STMT
PARSE #9:c=52003,e=65698,p=0,cr=30,cu=0,mis=1,r=0,dep=0,og=1,tim=1327904235010494

执行和获取同解析在格式上是一样的,这里就不赘述了

② commit和rollback和XCTEND条目格式

XCTEND rlbk=0, rd_only=0

Oracle不需要客户端显示地开始一个事务,DBMS在第一个数据项目被修改或分布式操作执行后会自动打开一个事务
       比如,通过dblink从一个表执行select
       在trc中事务的边界通过XCTEND条目标记,格式如下:
       XCTEND rlbk=[0-1],rd_only=[0-1]

③ 执行计划,统计信息与STAT条目格式
       
       STAT条目报告了执行计划和统计信息

STAT #6 id=1 cnt=0 pid=0 pos=1 obj=18 op=\'TABLE ACCESS BY INDEX ROWID OBJ$ (cr=2 pr=0 pw=0 time=194 us)\'
STAT #6 id=2 cnt=0 pid=1 pos=1 obj=37 op=\'INDEX RANGE SCAN I_OBJ2 (cr=2 pr=0 pw=0 time=95 us)\'

一组STAT条目的每一行代表了形成语句结果的行源
       所谓的行源,指从索引或表中检索的数据或者多表连接的中间结果(因为必须先进行两表连接)
       
       10g以后,STAT条目仅在TIMED_STATISTICS=TRUE,并且SQL_TRACE=TRUE时才被写入
       请注意,若STATISTICS_LEVEL=BASIC(缺省为TYPICAL)时会隐式设置TIMED_STATISTICS=FASLE

④ 等待事件和WAIT条目格式

WAIT #9: nam=\'SQL*Net message to client\' ela= 4 driver id=1650815232 #bytes=1 p3=0 obj#=52523 tim=1327922883350249
WAIT #9: nam=\'SQL*Net message from client\' ela= 301 driver id=1650815232 #bytes=1 p3=0 obj#=52523 tim=1327922883350743 WAIT #11: nam=\'db file sequential read\' ela= 253 file#=1 block#=420 blocks=1 obj#=355 tim=1327923455671258
WAIT #11: nam=\'db file sequential read\' ela= 7073 file#=1 block#=43998 blocks=1 obj#=355 tim=1327923455678537
WAIT #11: nam=\'db file sequential read\' ela= 91 file#=1 block#=43999 blocks=1 obj#=355 tim=1327923455678836
WAIT #11: nam=\'db file sequential read\' ela= 14433 file#=1 block#=53521 blocks=1 obj#=355 tim=1327923455693393

⑤ 绑定变量和BINDS条目格式
       
       绑定变量的详细信息包括绑定变量的数据类型和值
       通过这些信息我们可以得到最大化的诊断
       例如,索引列的数据类型与绑定变量的数据类型不匹配,导致索引失效,CPU使用率增加,因为还存在隐式数据类型转换
       一个BINDS条目的结构由后面跟着游标编号的单词BINDS和每一个绑定变量单独的子部分组成

BINDS #9:
kkscoacd
Bind#0
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=b7ee5a5c bln=22 avl=02 flg=05
value=20
Bind#1
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=b7ee5a38 bln=24 avl=02 flg=05
value=3

当将绑定变量与子部分相关联时,不用关心数字,他们会被包含在绑定变量的名称中,例如 ":B1"

hr@ORCL> select dump(employee_id) from employees where rownum=1;

DUMP(EMPLOYEE_ID)
----------------------------------------------------------------------------------------------------
Typ=2 Len=2: 194,2

这里的Typ就是数据类型编号
       
       下次Think再把优化或者诊断的案例给附上,此文未完待续哦,,

深入理解Oracle调试事件:10046事件详解的更多相关文章

  1. JQuery在循环中绑定事件的问题详解

    JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...

  2. Android事件传递机制详解及最新源码分析——ViewGroup篇

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 在上一篇<Android事件传递机制详解及最新源码分析--View篇>中,详细讲解了View事件的传递机制,没掌握或者掌握不扎实的小伙伴 ...

  3. Android 的事件传递机制,详解

    Android 的事件传递机制,详解 前两天和一个朋友聊天的时候.然后说到事件传递机制.然后让我说的时候,忽然发现说的不是非常清楚,事实上Android 的事件传递机制也是知道一些,可是感觉自己知道的 ...

  4. javascript event(事件对象)详解

    javascript event(事件对象)详解   1. 事件对象     1. 事件对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 什 ...

  5. jquery移除、绑定、触发元素事件使用示例详解

    这篇文章主要介绍了jquery移除.绑定.触发元素事件使用示例详解,需要的朋友可以参考下. unbind(type [,data]) //data是要移除的函数 $('#btn').unbind(&q ...

  6. Android事件分发机制详解

    事件分发机制详解 一.基础知识介绍 1.经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_UP等 2 ...

  7. C#事件与委托详解

    from https://www.cnblogs.com/sjqq/p/6917497.html C#事件与委托详解[精华 多看看] Delegatedelegate是C#中的一种类型,它实际上是一个 ...

  8. Android开发——事件分发机制详解

    0. 前言   转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52566965 深入学习事件分发机制,是为了解决在Android开发中 ...

  9. Android Touch事件传递机制详解 下

    尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38025165 资源下载:http://download.csdn.net/detail/yu ...

  10. Javascript 调试利器 Firebug使用详解

    Javascript 调试利器 Firebug使用详解 有时候,为了更清楚方便的查看输出信息,我们可能需要将一些调试信息进行分组输出,那么可以使用console.group来对信息进行分组,在组信息输 ...

随机推荐

  1. CI 结合Bootstrap 分页

    #显示列表 public function index(){ //载入分页类 $this->load->library('pagination'); //每页显示的条数 $perPage= ...

  2. 如果没有指定Cookie的时效,那么默认的时效是。(选择1项)

    如果没有指定Cookie的时效,那么默认的时效是.(选择1项) A.一天 B. 永不过期 C.会话级别 D.一分钟 解答:C 这是API的原文:By default, -1 indicating th ...

  3. 电脑端与iPad 端如何共享ChemDraw结构

    在日常生活中,我们使用的电脑会有好几种系统,很多的软件不能做好各个系统的兼容.但是ChemDraw软件很好的解决了这个问题,可以应用于Mac.Windows两个电脑客户端以及Chem3D for iP ...

  4. MFC获取系统当前时间

    1.使用CTime类 CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime(); str=tm.Format("现在时间是%Y年% ...

  5. C语言逻辑运算符

    现在假设有这样一种情况,我们的软件比较特殊,要求使用者必须成年,并且成绩大于等于60,该怎么办呢? 或许你会想到使用嵌套的 if 语句,类似下面这样的代码: #include <stdio.h& ...

  6. 用vue2.0实现点击选中active,其他选项互斥的效果

    在正常的js中.我们如果要实现点击选中active然后其他取消的效果,我们可以定义一个类,当点击的时候给给多有的dom取消active的类,给当前元素加上这个类名,说的很啰嗦,直接来看代码说话吧(表示 ...

  7. poj_3250 单调栈

    题目大意 N头牛排成一列,每头牛A都能看到它前面比它矮的牛i,若前面有一个比他高的牛X,则X之前的牛j,A都无法看到.给出N头牛的高度,求出这N头牛可以看到牛的数目的总数. 题目分析 画图之后,可以很 ...

  8. Gson简要使用笔记(转载)

    经过比较,gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需 ...

  9. java手写的动态数组JimisunArray

    /** * @Author:jimisun * @Description: * @Date:Created in 22:10 2018-07-18 * @Modified By: */ public ...

  10. typecho与wordpress

    相信玩博客的人对这两个程序会相当熟悉把. 有些人玩了很久WP之后又转向了typecho 之后又回到wp.举个例子typecho犹如一个美丽的裸体女人.wp就是一个穿着绫罗绸缎的女人. 当你看着裸体一天 ...