现在的位置: 首页 > 综合 > 正文

sql trace、10046、tkprof介绍

2014年07月30日 ⁄ 综合 ⁄ 共 1296字 ⁄ 字号 评论关闭

   sql_trace命令会将SQL执行的整个过程输出到一个trace文件中,我们可以通过阅读这个trace文件来了解这个SQL执行过程中oracle究竟做了哪些事情。

   SQL是如何操作数据的。
   SQL执行过程中产生了那些等待时间。
   SQL执行中消耗了多少资源。
   SQL的实际执行计划。
   SQL产生的递归语句。

  10046事件并不是oracle官方提供给用户的使用命令,但目前已经使用非常广泛,它比sql_trace能够获得更多的信息。

   10046事件按照收集的信息内容,可以分为4个级别:

   Level1   等同于sql_trace的功能。
   Level4   在level1的基础上增加收集绑定变量的信息。
   Level8   在level1的基础上增加等待事件的信息。
   Level12  等同于level4 + level8 。
  sql trace和10046原始trace文件内容解析:
  PARSING IN CURSOR 部分
  len:  被分析SQL的长度
  dep: 产生递归SQL的深度
  uid:   user  id
  otc:   oracle command type 命令类型
  lid:    私有用户id
  tim:   时间戳
  hv:  hash  value
  ad:  SQL address

  parse, exec, fetch部分
  c:  消耗的cpu time
  e:  elapsed time 操作的用时
  p:  physical reads 物理读的次数
  cr: consistent reads 一致性读的数据块
  cu: current方式读的数据块
  mis: cursor miss in cache 硬分析次数
  r:  rows处理的行数
  dep: depth递归SQL的深度
  og:   optimizer goal优化器模式
  tim:  timstamp时间戳

  stats 部分
  id: 执行计划的行源号
  cnt: 当前行源返回的行数
  pid: 当前行源号的父号
  pos: 执行计划中的位置
  obj: 当前操作的对象id(如果当前行原始一个对象的话)
  op: 当前行源的数据访问操作
  经过tkprof格式化(对trace的原始文件分类统计)以后的格式解析:
  分析(parse): SQL的分析阶段。--如语法检查,语义检查、权限检查,根据统计信息生成执行计划。
  执行(execute): SQL的执行阶段。--如果是select语句,发现它没有做什么,如果是insert,update,delte,这一步骤就是最后一步。
  数据提取(fetch): 数据的提取阶段。--只有select有这部,根据执行计划取数据(扫描数据,关联,返回数据
  count: 计数器,表示当前的操作被执行了多少次。
  cpu: 当前的操作消耗CPU的时间(单位秒)。
  elapsed: 当前的操作一共用时多少(包括CPU和等待时间) 。
  disk: 当前操作的物理读(磁盘I/O次数) 。
  query: 当前操作的一致性方式读取的数据块数(通常是查询使用的方式) 。
  current:当前操作的current的方式读取的数据块数(通常是修改数据使用的方式) 。
  rows: 当前操作处理的数据记录数。

抱歉!评论已关闭.