事件深入浅出Oracle中10046事件(oracle中10046)

事件深入浅出Oracle中10046事件

Oracle数据库是目前世界上最流行的关系型数据库之一,随着数据量的不断增加,数据库调优变得越来越重要。为了快速、准确地找到问题所在,Oracle发布了一系列的事件(Event),比如10046事件,这个事件非常有助于解决性能问题。在本文中,我们将深入浅出地介绍10046事件的相关知识。

一、10046事件概述

10046事件是Oracle数据库提供的一个性能分析事件,可以用来捕获SQL语句执行的详细信息。它可以根据用户的需求输出SQL执行的各种信息,并且可以通过扩展参数来控制输出的详细程度。10046事件可以对整个系统启用,也可以对单个会话启用,它的作用是给用户提供SQL语句的调试信息,比如SQL语句的执行计划、绑定变量的值、等待事件等,非常有助于提高系统的性能。

二、10046事件的用途

10046事件可以用于以下情况:

1.跟踪某个SQL语句的执行过程。

2.了解某个SQL语句的整体性能指标。

3.查看某个SQL语句的执行计划及优化器使用的统计信息等。

4.查看绑定变量的值、等待事件等信息。

三、10046事件的使用方法

在Oracle中,可以通过如下语句来开启10046事件:

alter session set events ‘10046 trace name context forever, level ‘;

其中,level为可选参数,代表跟踪的详细程度,取值范围为1-12,默认值为4。当level为1时,只会记录SQL语句的执行计划;当level为4时,除了执行计划外,还会记录SQL语句的IO操作及CPU消耗;当level为8时,还会记录SQL语句的等待事件;当level为12时,还会记录SQL语句的绑定变量。

除了使用alter session语句外,还可以通过dbms_system.set_ev函数来动态的开启10046事件。具体使用方法如下:

exec dbms_system.set_ev(, , 10046, );

其中,SID代表会话的ID号,SERIAL代表会话的SERIAL号。

四、10046事件的输出格式

在开启10046事件后,它会将记录的详细信息输出到trace文件中。trace文件的输出位置可以通过以下参数来控制:

1. user_dump_dest:输出用户的trace文件,通常用于单个会话的跟踪,格式为:ora__.trc。

2. background_dump_dest:输出后台的trace文件,通常用于对整个系统进行跟踪,格式为:_ora_.trc。

trace文件中包含了SQL语句的执行计划、IO操作、CPU消耗、等待事件以及绑定变量的值等详细信息,其中CPU消耗的数据是在UNIX或Linux系统下的秒数,可以通过以下命令来将其转换为TICK数:

awk ‘/nanosleep|clock_gettime|clock_nanosleep|gettimeofday/ { print $1,$NF * 1000000000}’

五、10046事件的实例分析

下面我们通过一个简单的实例来分析10046事件的用法。首先我们需要开启10046事件,在SQL*Plus中执行以下语句:

alter session set events ‘10046 trace name context forever, level 12’;

然后我们执行以下SQL语句:

select *

from emp

where job=’CLERK’;

查询结果如下:

empno ename job mgr hiredate sal comm deptno

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

7876 ADAMS CLERK 7788 23-MAY-87 1100 20 20

7900 JAMES CLERK 7698 03-DEC-81 950 0 30

7934 MILLER CLERK 7782 23-JAN-82 1300 0 10

我们可以从trace文件中看到SQL执行的详细信息,如下所示:

PARSING IN CURSOR #4 len=20 dep=0 uid=88 oct=3 lid=88 tim=1604534154409947 hv=1381641912 ad=’0x7f3221d842e8′ sqlid=’0sbc119p89pkp’

select *

from emp

where job=’CLERK’

END OF STMT

PARSE #4:c=0,e=344,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=2145060260,tim=1604534154409946

EXEC #4:c=0,e=296,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=2145060260,tim=1604534154410261

WT #4: nam=’SQL*Net message to client’ ela= 3 driver id=1413697536 #bytes=1 p3=0 obj#=757 tim=1604534154410313

FETCH #4:c=0,e=381,p=0,cr=7,cu=0,mis=0,r=7,dep=0,og=1,plh=2145060260,tim=1604534154410376

通过上面的信息,我们可以看到SQL语句执行的详细信息,包括SQL语句的解析时间(PARSING)、执行时间(EXEC)、等待时间(WT)和获取数据时间(FETCH)等。通过这些信息,我们可以彻底了解SQL语句的执行情况,从而做到快速定位性能问题。

六、总结

在本文中,我们深入浅出地介绍了Oracle中的10046事件,包括它的作用、使用方法、输出格式和实例分析。通过学习本文,读者可以全面了解10046事件的相关知识,并能够运用它来快速、准确地解决性能问题。


数据运维技术 » 事件深入浅出Oracle中10046事件(oracle中10046)