文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SQL trace 10046事件

SQL trace 10046事件

时间:2010-09-27  来源:ank

SQL trace  10046事件

1>sql语句出现问题,用sql_trace命令将sql执行的整个过程数据到一个trace文件中

启动sql_trace

SQL>alter session set sql_trace=true ; 只对session进行跟踪

SQL>alter database set sql_trace=true; 实例级别,跟踪的sqL太多,代价大

确定当前的trace文件

SQL>alter session set tracefile_identifier='ktrace';

Oracle SQL_TRACE生成的trace文件默认路劲是$ORACLE_BASE/admin/SID/udump.  

Oracle 11g,trace 默认路径在:$ORACLE_BASE\diag\rdbms\orcl\orcl\trace目录下.

SQL查找当前的trace文件名

SELECT      d.VALUE

         || '/'

         || LOWER (RTRIM (i.INSTANCE, CHR (0)))

         || '_ora_'

         || p.spid

         || '.trc'

            AS "trace_file_name"

  FROM   (SELECT   p.spid

            FROM   v$mystat m, v$session s, v$process p

           WHERE   m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,

         (SELECT   t.INSTANCE

            FROM   v$thread t, v$parameter v

           WHERE   v.NAME = 'thread'

                   AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,

         (SELECT   VALUE

            FROM   v$parameter

           WHERE   NAME = 'user_dump_dest') d;

启动sql_trace

SQL>alter session set sql_trace=true;

事务处理

Select * from tab

关闭sql_trace

SQL>alter session set sql_trace=false;

使用tkprof工具分析

该工具只能分析SQL_trace和10046事件产生的trace

Sys=no trace文件中将输入所有sys用户的操作,默认yes

Aggregate=yes |no,tkprof 将所有相同的sql在输入文件中作合并。

TKPROF: Release 10.2.0.1.0 - Production on Fri Aug 13 18:01:05 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Trace file: anktest_ora_18305_anktrace.trc

Sort options: default

********************************************************************************

count    = number of times OCI procedure was executed

cpu      = cpu time in seconds executing 

elapsed  = elapsed time in seconds executing

disk     = number of physical reads of buffers from disk

query    = number of buffers gotten for consistent read

current  = number of buffers gotten in current mode (usually for update)

rows     = number of rows processed by the fetch or execute call

********************************************************************************

版本信息

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS //非递归sql语句

call     count       cpu    elapsed       disk      query    current        rows

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

Parse        6      0.19       0.22          0          0          0           0

Execute      7      0.00       0.00          0          0          0           0

Fetch      251      0.56       3.38       1077       8612          0        3649

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

total      264      0.75       3.61       1077       8612          0        3649

Misses in library cache during parse: 4 #shared pool 中没有命令,说明做了4次硬解析,软解析此处为0 

OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows

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

Parse       23      0.03       0.09          0          0          0           0

Execute     31      0.02       0.13          0          0          0           0

Fetch       38      0.00       0.08          8         81          0          14

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

total       92      0.06       0.31          8         81          0          14

Misses in library cache during parse: 14

Misses in library cache during execute: 8

    6  user  SQL statements in session.

   37  internal SQL statements in session.

   43  SQL statements in session.

********************************************************************************

Trace file: anktest_ora_18305_anktrace.trc

Trace file compatibility: 10.01.00

Sort options: default

       0  session in tracefile.

       6  user  SQL statements in trace file.

      37  internal SQL statements in trace file.

      43  SQL statements in trace file.

      18  unique SQL statements in trace file.

     699  lines in trace file.

     365  elapsed seconds in trace file.


更具体详看原始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 misss in cache 硬分析次数

                R: -rows 处理的行数

                Dep: depth 递归SQL的深度

                Og: optimizer goal 优化器模式

                Tim:timestamp时间戳

 

STATS 部分:

                Id: 执行计划的行源号

                Cnt:当前行源返回的行数

                Pid:当前行源号的父号

                Pos:执行计划中的位置

                Obj:当前操作的对象id(如果当前行原始一个对象的话)

                Op:当前行源的数据访问操作


10046事件

主要用来跟踪sql语句

收集内容,4个等级

 Level 1: 等同于SQL_TRACE 的功能

 Level 4: 在Level 1的基础上增加收集绑定变量的信息

 Level 8: 在Level 1 的基础上增加等待事件的信息

 Level 12:等同于Level 4+Level 8, 即同时收集绑定变量信息和等待事件信息。



对当前session使用10046事件

SQL>alter session set events '10046 trace name context forever,level 12'

执行相关事务

关闭

SQL>alter session set events '10046 trace name context off'

对其他会话进行跟踪,trace 与10046事件跟踪

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

SQL>execute dbms_system.set_sql_trace_in_sesson(296,996,true);

SQL>execute dbms_system.set_sql_trace_in_sesson(296,996,false);

10046事件。

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

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

PL/SQL 过程已成功完成。


总之,当SQL语句操作出现性能问题时,我们可以用SQL_TRACE 或者10046事件进行跟踪是最合适的。 如果是数据库整体性能下降,就需要使用statspack或者AWR对数据库进行分析。 

排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载