数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

ORACLE10046事件详解


发布日期:2023年04月24日
 
ORACLE10046事件详解

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

event是oracle用于系统性能分析时的一个最重要的事件当激活这个事件后将通知oracle kernel追蹤会话的相关即时信息并写入到相应trace文件中这些有用的信息主要包括sql是如何进行解析绑定变量的使用情况会话中发生的等待事件等

event 可分成不同的级别(level)分别追蹤记录不同程度的有用信息对于这些不同的级别应当注意的是向下兼容的即高一级的trace信息包含低于此级的所有信息

event的追蹤级别大致有

level :跟蹤sql语句包括解析执行提取提交和回滚等

level :包括变量的详细信息

level :包括等待事件

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

其中level 相当于打开了sql_trace

前提条件

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

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

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

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

首先获得spidsidserial#machine为连接oracle的机器名

select bspidasidaserial#amachine from v$session av$process b where apaddr =baddr and asid =

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

事件启动需要SYSDBA权限

SQL>execute sysdbms_systemset_ev(

PL/SQL procedure successfully completed

参数说明

:SID

:SERIAL#

注意这里必须以sysdba登录

或者会话级别的跟蹤

SQL> alter session set events trace name context forever level ;

会话已更改

在应用程序中执行对数据库的操作

比如性能较差的一些查询插入删除操作等

事件的关闭

SQL>execute sysdbms_systemset_ev(

PL/SQL procedure successfully completed

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

SQL> alter session set events trace name context off ;

会话已更改

获得产生的跟蹤文件所在的目录

SQL> select value from v$parameter where name = user_dump_dest;

转到该目录下可以看到生成了一个zftang_ora_trc文件此处的即SPID的值

使用tkprof命令转换TRC文件

在命令行下执行oracle的tkprof命令将zftang_ora_trc转化为文本文件

$ tkprof orai_ora_trc orai_ora_sql

tkprof /u/diag/rdbms/bysrac/bysrac/trace/bysrac_ora__TEST_trc /home/oracle/test_trc

此时在zftang_ora_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_ set flag = 测试

call count cpu elapsed disk query current rows

Parse

Execute

Fetch

total

Misses in library cache during parse:

Optimizer mode: ALL_ROWS

Parsing user id:

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)这样我们就可以判断具体是什么原因导致我们的系统变慢或者…

上一篇:让PL/SQL Developer记住登陆密码

下一篇:Oracle9i OCP课程大纲