`

Oracle的10046事件

 
阅读更多

Oracle的10046事件,可以跟踪应用程序所执行的SQL语句,并且得到其解析次数.执行次数,CPU使用时间等信息。这对我们分析、定位数据库性能问题是非常有用的。

10046event是oracle用于系统性能分析时的一个最重要的事件。当激活这个事件后,将通知oracle kernel追踪会话的相关即时信息,并写入到相应trace文件中。这些有用的信息主要包括sql是如何进行解析,绑定变量的使用情况,会话中发生的等待事件等
10046event 可分成不同的级别(level),分别追踪记录不同程度的有用信息。对于这些不同的级别,应当注意的是向下兼容的,即高一级的trace信息包含低于此级的所有信息。

 

10046event的追踪级别大致有:

level 1:跟踪sql语句,包括解析、执行、提取、提交和回滚等。

level 4:包括变量的详细信息

level 8:包括等待事件

level 12:包括绑定变量与等待事件

 

其中,level 1相当于打开了sql_trace

前提条件:
(先确保要event的会话环境符合条件)

1、必须确保timed_statistics为TRUE,这个参数可以在会话级上进行修改。

2、为了确保trace输出能够完整进行,还要调整此会话对trace文件大小的限制,一般将此限制取消,即将max_dump_file_size设置为UNLIMITED,或者设置为一个很大的阙值。

在满足了上述条件后,就可以启用10046event对会话进行后台跟踪了。

 

1、首先获得spid、sid、serial#,machine为连接oracle的机器名
select b.spid,a.sid,a.serial#,a.machine from v$session a,v$process b where a.paddr =b.addr  and a.sid = '159'

继续往下看,就可以知道为什么找到SPID了;

2、10046事件启动
SQL>execute sys.dbms_system.set_ev(15,196,10046,1,'');
PL/SQL procedure successfully completed.

参数说明:
15:SID
196:SERIAL#

注意这里必须以sysdba登录。

或者会话级别的跟踪:

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

会话已更改。

3、在应用程序中执行对数据库的操作
比如性能较差的一些查询、插入、删除操作等。

4、10046事件的关闭
SQL>execute sys.dbms_system.set_ev(15,196,10046,0,'');

PL/SQL procedure successfully completed.

或者对应上面的,在会话级别关闭

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

会话已更改。

5、获得产生的跟踪文件所在的目录
SQL> select value from v$parameter where name = 'user_dump_dest';

转到该目录下可以看到生成了一个zftang_ora_596.trc文件,此处的596即SPID的值。


6、使用tkprof命令,转换TRC文件
在命令行下执行oracle的tkprof命令,将zftang_ora_596.trc转化为文本文件
如:
$ tkprof  ora9i_ora_24722.trc ora9i_ora_24722.sql

此时在zftang_ora_596.sql文件中,就可以看到刚才执行应用程序时所执行的sql语句的执行次数、CPU使用时间等数据。
TRACE将消耗相当的系统资源,因此我们在使用TRACE的时候应当慎重。对于正式的系统,应当只在必要的时候进行TRACE操作,并且应当及时关闭。

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

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

 

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

update test_01 set flag1 = '测试'

call     count       cpu    elapsed       disk      query    current        rows

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

Parse        1      0.00       0.01          0          2          0           0

Execute      1      2.35       2.64        358       1865     220043       50782

Fetch        0      0.00       0.00          0          0          0           0

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

total        2      2.35       2.65        358       1867     220043       50782

Misses in library cache during parse: 1

Optimizer mode: ALL_ROWS

Parsing user id: 63      


timed_statistics的理解
关于参数timed_statistics的一段解说
Without timed statistics, Oracle records the reason for each wait before it begins to wait, and when the wait is over, it records whether it timed out. But with timed statistics enabled, Oracle checks the time just before and after each wait, and also records the time waited. The time waited is recorded in hundredths of a second- that is, centiseconds.

本人的理解是:参数timed_statistics没有设置的话.Oracle只记录wait开始和wait结束这一段时间内的wait reason和wait结束是否是因为timed out.而设置timed_statistics=true后.Oracle就记录了wait的时间信息.有了这些时间信息可以确定等待事件在哪个时间段出现比较频繁.   请指正

在timed_statistics  = false时,我们只能够知道这些等待时间的次数(records the reason for each wait ), 以及等待时间timed out的次数(records whether it timed out)

在timed_statistics = true时,我们可以知道系统在某个具体的等待事件上等待的时间(records the time waited),这样我们就可以判断具体是什么原因导致我们的系统变慢或者.

分享到:
评论

相关推荐

    oracle10046事件详解

    ### Oracle 10046 事件详解 #### 一、引言 Oracle 数据库作为企业级应用的重要组成部分,其性能优化与问题诊断一直是DBA(数据库管理员)关注的重点领域。Oracle 提供了一系列内置的诊断工具来帮助 DBA 识别并解决...

    oracle的10046事件跟踪.pdf

    Oracle的10046事件跟踪是数据库性能分析的关键工具,尤其在解决应用程序性能瓶颈时。这个功能允许数据库管理员深入观察SQL语句的执行过程,获取详细的执行信息,包括解析次数、执行次数、CPU使用时间等,从而进行...

    oracle事件探查器

    在Oracle中,事件探查器通过启用特定的跟踪事件来工作,这些事件包括但不限于10046(用于跟踪执行计划和调用堆栈)、10053(用于跟踪优化器决策过程)和10040(用于跟踪服务器进程)。通过设置这些事件,我们可以...

    Oracle事件探查器

    通过设置10046事件,可以获取到关于数据库操作的丰富信息。 3. **10053 trace事件**:这个事件用于获取SQL优化器的详细信息,包括如何选择执行计划、优化过程的细节以及成本估算等。这对于理解和优化复杂的SQL查询...

    最牛逼的Oracle 11g OCP学习笔记

    Oracle 10046事件和ASH(Active Session History)是进行性能诊断的重要工具。通过分析V$视图和AWR(Automatic Workload Repository)报告,可以找出系统瓶颈并进行相应的SQL和参数调优。此外,了解SGA组件的作用,...

    oracle诊断事件及深入解析10053事件

    - **示例**:设置10046事件 ``` SQL> EXECUTE SYS.DBMS_SYSTEM.SET_EV(sid, serial#, 10046, 12, ''); ``` ##### 4、使用`Oradebug`设置 示例: - 首先查找会话的spid ``` SQL> SELECT ADDR, PID, SPID FROM ...

    10046事件和sql_trace.docx

    【10046事件与SQL_TRACE】是Oracle数据库中用于诊断和优化SQL语句执行性能的重要工具。当面临SQL语句执行效率低下时,我们可以启用SQL_TRACE来追踪其执行流程,获取详细的执行信息,从而找出性能瓶颈。 一、启用SQL...

    Oracle的重要诊断工具events_如10046事件来进行SQL跟踪

    ### Oracle的重要诊断工具events_如10046事件来进行SQL跟踪 #### 一、Oracle跟踪文件概述 在Oracle数据库管理中,为了更好地理解和解决性能问题以及系统异常,Oracle提供了多种跟踪文件,这些文件能够帮助数据库...

    Oracle事件探查器.rar

    7. **10046事件**:10046是常用的跟踪级别,它能详细记录SQL执行的各个阶段,包括执行计划、绑定变量值等,对于性能调优非常有用。通过设置10046事件,配合10053(显示优化器决策过程)可以得到更丰富的信息。 8. *...

    Oracle的重要诊断工具events_如10046事件来进行SQL跟踪.docx

    ### Oracle的重要诊断工具events_如10046事件来进行SQL跟踪 #### 一、Oracle跟踪文件概述 在Oracle数据库管理中,跟踪文件是用于诊断问题的重要工具之一。Oracle跟踪文件主要分为三种类型: 1. **后台报警日志...

    10046事件跟踪详细指南

    在Oracle数据库管理中,10046事件跟踪是一项重要的诊断工具,它允许管理员深入分析SQL语句的执行过程,从而定位并解决问题。本文将详细介绍如何启用和使用SQL_TRACE以及10046事件跟踪。 **SQL_TRACE的使用** SQL_...

    oracle的10053事件

    跟踪类事件:用于Sql优化等,如10046事件可追踪SQL执行。 2. 事件设置: - 在`init.ora`文件中设置事件,适用于所有会话。 - 使用`ALTER SESSION SET EVENT`命令,只对当前会话生效。 - `ALTER SYSTEM DUMP`...

    Oracle中通过触发器来追踪用户的活动

    Oracle从Oracle8i开始引入了一类特殊触发器,它们不再局限于传统的DML事件,而是扩展到了系统级别,包括数据库启动触发器、DDL触发器和用户登录/注销触发器。这些触发器为数据库审计提供了新途径,特别是用户登录/...

    oracle事件跟踪器

    Oracle事件跟踪器,也被称为SQL Trace或10046事件,是Oracle数据库提供的一种强大的诊断工具,用于收集关于数据库操作的详细信息。这个功能对于性能优化、问题排查以及理解数据库内部工作流程至关重要。在Oracle环境...

    Oracletrace

    其中,SQL_TRACE与10046事件是最常用的追踪方式。除了这些标准方法外,Oracle还提供了ORADEBUG等其他高级追踪技术。本文将详细介绍Oracle中的追踪机制,包括追踪文件的位置、不同版本之间的差异,以及如何使用追踪...

    Oracle数据库诊断事件详解-用于数据维护诊断使用.doc

    ### Oracle数据库诊断事件详解 #### 一、Oracle数据库诊断事件简介 Oracle数据库中的**诊断事件**(Diagnosable Events)是一类特殊的机制,用于改变数据库的行为、启用收集跟踪或调试信息以及启用对数据库的额外...

    oracle 诊断事件内容列表

    Oracle诊断事件是用于深入分析数据库内部行为的一组特定事件,它们允许DBA或开发人员收集关于Oracle数据库运行时的详细信息,以解决性能问题、调试错误或优化查询。以下是一些重要的Oracle诊断事件的详细说明: 1. ...

    statement_tracer_for_oracle

    2. 使用SQL Trace的10046事件:在SQL*Plus或PL/SQL环境中,可以通过ALTER SESSION命令设置10046事件,开启不同级别的SQL追踪,例如`ALTER SESSION SET EVENTS '10046 trace name context forever, level 12'`。...

    Spotlight.On.Oracle

    2. **SQL Trace和10046事件**:通过开启SQL Trace和10046事件,可以获取SQL语句执行的详细步骤和时间,帮助找出性能问题。 3. **DBA视图**:如V$SESSION、V$SQLAREA、V$BUFFER_CACHE等,提供实时数据库状态信息,...

Global site tag (gtag.js) - Google Analytics