Oracle OWI 等待事件历史视图及相关视图

    Oracle提供的等待事件视图使得我们可以获取指定session以及实例级别等待事件的详细信息,这些视图分别是v$session_wait,v$session_event,以及v$system_event。然而这几个视图对于历史等待事件无能为力。对此,Oracle也提供了历史等待事件视图v$session_wait_history,同时视图v$session_wait_class,v$system_wait_class也提供了基于等待类别的性能分析,下面是基于Oracle 10g对此展开的描述。

 

1、视图v$session_wait_history

--望文生义可知,v$session_wait_history视图提供了历史等待事件的信息。
--v$session_wait_history与v$session_wait基本相同,仅仅多出了SEQ#,EVENT#,WAIT_COUNT这三列。
--SEQ#列表示SESSION按顺序遇到的等待事件,最近的等待事件为1,最远的为10。
--通过该视图可以快速了解指定sid最近曾经经历了哪些等待(美中不足的是只提供最近的10个等待事件)。
--当开始一个新的等待事件时,该视图中的信息将被刷新,记录最远时间的事件将会移出,同时最新的等待事件为1,其他向后移一个顺序号。
--WAIT_TIME 列表示这个等待事件在会话中的等待时间。=0:表示正在等待事件完成;>0最后的等待时间。
--WAIT_CONT列表示等待的次数。

--查询历史sid
goex_admin@SYBO2SZ> SELECT DISTINCT sid
  2    FROM v$session_wait_history h
  3   WHERE NOT EXISTS
  4            (SELECT 1
  5               FROM v$session_event
  6              WHERE sid = h.sid);

       SID
----------
      1062
      1065
      1060

--下面查询sid为1062的历史等待事件信息
--下面的查询可以看出该sid经历了一系列的等待事件
--seq#为10的表明是sql被解析到library cache时的等待
--seq#为9的则是表明加载数据字典到缓冲区碰到的等待
--seq#为7,8则表明在返回结果时经历了db file sequential read等待
--seq#为6表明当前sid所需的数据块在被读入buffer时,此时其他的session正在将该块读入buffer
--seq#为1,2表明处于空闲等待,从WAIT_TIME为0也可知为空闲等待,之后该sid被关闭
goex_admin@SYBO2SZ> select sid,seq#,event#,event,wait_time,wait_count from v$session_wait_history where sid=1062;

       SID       SEQ#     EVENT# EVENT                            WAIT_TIME WAIT_COUNT
---------- ---------- ---------- ------------------------------- ---------- ----------
      1062          1        257 SQL*Net message from client              0          1
      1062          2        253 SQL*Net message to client                0          1
      1062          3        116 db file sequential read                  9          1
      1062          4        257 SQL*Net message from client              0          1
      1062          5        253 SQL*Net message to client                0          1
      1062          6         67 read by other session                    6          1
      1062          7        116 db file sequential read                 11          1
      1062          8        116 db file sequential read                  1          1
      1062          9        205 latch: row cache objects                 9          1
      1062         10        212 latch: library cache                     5          1

2、视图v$session_wait_class

--该视图提供了当前连接到数据库实例的所有会话级的信息。
--查看所有session等待类别
goex_admin@SYBO2SZ>   SELECT wait_class#,
  2           wait_class,
  3           SUM (total_waits),
  4           SUM (time_waited)
  5      FROM v$session_wait_class
  6  GROUP BY wait_class#, wait_class
  7  ORDER BY 3, 4;

WAIT_CLASS# WAIT_CLASS            SUM(TOTAL_WAITS) SUM(TIME_WAITED)
----------- --------------------- ---------------- ----------------
          1 Application                         42                0
          2 Configuration                     1219           110012
          5 Commit                            1332              154
          0 Other                            14387            19744
          4 Concurrency                      34092            74180
          8 User I/O                       1945820            42429
          9 System I/O                     3899256           731677
          7 Network                        4580071             9068
          6 Idle                          10577566       3175310702

--从上面的查询来看,系统等待以Idle的情形居多,系统总体运行良好。
--为便于演示,我们可以查看是哪些sid导致了过多的User I/O
goex_admin@SYBO2SZ>   SELECT sid,
  2           time_waited,
  3           total_waits,
  4           ROUND (time_waited / total_waits, 2) AS percnt
  5      FROM v$session_wait_class
  6     WHERE wait_class# = 8 AND ROWNUM < 2
  7  ORDER BY percnt;   

   SID TIME_WAITED TOTAL_WAITS     PERCNT
------ ----------- ----------- ----------
  1014       12088      186162        .06

--一旦找到上述导致某类等待事件过多的sid,进一步可以找出对应的sql语句。其次也可以找出该sid经历的所有等待事件。       

--查看单个会话级的等待类别
-- Author : Robinson
-- Blog   : http://blog.csdn.net/robinson_0612
--下面的查询可以看出sid为1083的session经历等待最多的是网络等待
goex_admin@SYBO2SZ> select * from  v$session_wait_class where sid=1083 order by 6 desc;

   SID    SERIAL# WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS         TOTAL_WAITS TIME_WAITED
------ ---------- ------------- ----------- ------------------ ----------- -----------
  1083         72    2000153315           7 Network                     11           0
  1083         72    2723168908           6 Idle                        10          15
  1083         72    4217450380           1 Application                  2           0
  1083         72    1740759767           8 User I/O                     2           3

3、视图v$system_wait_class

--该视图包含了v$session_wait_class视图的信息,显示的是自实例启动后等待类在实例级的总等待和等待时间。
--该视图基于数据库整体等待事件类进行评估数据库性能,而非单个等待事件。

--下面的查询中可以看出基于用户类的等待事件最多,应该集中focus 在User I/O这一块。
SQL> select * from v$system_wait_class order by 4 desc;

WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS            TOTAL_WAITS TIME_WAITED
------------- ----------- --------------------- ----------- -----------
   1740759767           8 User I/O                276741470     5086685
   2000153315           7 Network                 131198524      177709
   2723168908           6 Idle                     33734334  6334346903
   4108307767           9 System I/O               11799468     2288863
   3386400367           5 Commit                    1204500       91997
   3875070507           4 Concurrency                 51928       81428
   1893977003           0 Other                       38786       43836
   4217450380           1 Application                 28600       20398
   3290255840           2 Configuration               15309      296458
   4166625743           3 Administrative               1298       30917

10 rows selected.

4、视图v$event_histogram 

--v$event_histogram视图是等待事件直方图。有点类似于列上使用的直方图,用于描述等待事件在特定等待时间段内的频度。
--根据对某些特定等待事件的频度进行分析可以得出该等待事件是否处于异常状况,进而采取进一步的措施。
--对下面的查询结果进行分析

goex_admin@SYBO2SZ> select * from v$event_histogram where event#=115;

    EVENT# EVENT                 WAIT_TIME_MILLI WAIT_COUNT
---------- --------------------- --------------- ----------
       115 log file sync                       1       1739
       115 log file sync                       2       1151
       115 log file sync                       4        374
       115 log file sync                       8       1637
       115 log file sync                      16       3281
       115 log file sync                      32       4070
       115 log file sync                      64       4308
       115 log file sync                     128       3698
       115 log file sync                     256       3491
       115 log file sync                     512       3556
       115 log file sync                    1024       6083
--上面的查询中展示的是log file sync等待事件自本实例启动以来基于事件频度发生的次数。
--在大于512ms至1024ms区间,该事件发生的次数竟然达到了6083次。即时是小于2ms的情形也出现了1739次。明显存在异常。
--上述情形表明该数据库正在经历严重的log file sync 事件。对于上述情形,我们在awr报告的top event中应该也会看到该等待事件。
--log file sync等待事件和事务的提交回滚相关,表明存在过多的提交或短事务。应考虑批量提交以及日志文件大小,缓冲大小是否合理。

5、小结
  a、Oracle体供的等待事件可以快速定位指定sid正在经历哪些等待。参考:Oracle OWI 等待事件视图
  b、可以通过v$session_wait_history视图查询历史等待事件最近的10个等待信息。
  c、视图v$session_wait_class提供了所有会话级的按等待事件类别来度量等待事件的详细信息。
  d、视图v$system_wait_class提供了整个实例级别(自实例启动后)的按等待事件类别来度量等待事件的详细信息。
  e、视图v$session_wait_class与视图v$system_wait_class是从整体(等待事件类)来考量当前系统的等待事件瓶颈,非单个等待事件。
  f、视图v$event_histogram为等待事件提供直方图信息,严重的等待事件,如出现在top event中的可以在该视图得以展现。

 

更多参考

PL/SQL --> 游标

PL/SQL --> 隐式游标(SQL%FOUND)

批量SQL之 FORALL 语句

批量SQL之 BULK COLLECT 子句

PL/SQL 集合的初始化与赋值

PL/SQL 联合数组与嵌套表
PL/SQL 变长数组
PL/SQL --> PL/SQL记录

SQL tuning 步骤

高效SQL语句必杀技

父游标、子游标及共享游标

绑定变量及其优缺点

dbms_xplan之display_cursor函数的使用

dbms_xplan之display函数的使用

执行计划中各字段各模块描述

使用 EXPLAIN PLAN 获取SQL语句执行计划

Oracle ROWID

NULL 值与索引(一)

NULL 值与索引(二)

启用 AUTOTRACE 功能

函数使得索引列失效

Oracle 绑定变量窥探

Oracle 自适应共享游标

Oracle 表空间与数据文件Oracle 密码文件Oracle 参数文件Oracle 联机重做日志文件(ONLINE LOG FILE)Oracle 控制文件(CONTROLFILE)Oracle 归档日志Oracle 回滚(ROLLBACK)和撤销(UNDO)Oracle 数据库实例启动关闭过程Oracle 10g SGA 的自动化管理Oracle 实例和Oracle数据库(Oracle体系结构) 

时间: 2024-11-03 22:19:20

Oracle OWI 等待事件历史视图及相关视图的相关文章

Oracle OWI 等待事件视图(v$session_wait/v$session_event/v$system_event)

    通常情况下,用户提交一条SQL语句,总会存在这样或那样的等待事件.也就是说由于所需资源被占用导致进程不得不处于等待状态.Oracle为我们提供了获取这些等待事件的可用视图.根据这些视图可以得知哪些事件导致该SQL语句效率低下而采取相应的修改或调整.本文基于Oracle 10g描述了如何通过视图v$session_wait,v$session_event,以及v$system_event去获取等待事件的相关信息.   1.等待事件相关参数  timed_statistics      指定

Oracle中等待事件深入分析

概述 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1).空闲等待事件 ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件. 2). 非空闲等待事件 专门针对 ORACLE 的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件是 在调整数据库的时候需要关注与研究的. 在 Oracle 10g 中的等待事件可以通过 v$event_name 视图来查看等待事件的相关信息. 常见等待事件 Buffer busy wait

Oracle的等待事件

转自http://www.kingsnet.biz/Article/database/oracle/200804/8694_5.html Oracle的等待事件是衡量Oracle运行状况的重要依据及指标.等待事件的概念是在Oracle7.0.1.2中引入的,大致有100个等待事件.在Oracle 8.0中这个数目增加到了大约150个,在Oracle8i中大约有200个事件,在Oracle9i中大约有360个等待事件.主要有两种类别的等待事件,即空闲(idle)等待事件和非空闲(non-idle)

Oracle Mutex 等待事件

Oracle Mutex 等待事件之: cursor pin S pin S 等待事件说明,当一个会话(session)试图去更新一个共享的 Mutex Pin,同时已经有其他会话正在更新(updating)同一个 Shared Mutex Pin.注意,Pin S 的Mutex位于子游标上,是动态创建的,无法从等待事件中获得,但是可以在竞争出现的情况下,通过观察 x$mutex_sleep_history 来获得. 文档说明如下: Oracle Mutex 等待事件之: cursor pin

防患未然:Oracle gc等待事件的发现、处理与预防

系统环境 两节点的RAC:AIX6.1+Oracle 11.2.0.3.3   AWR里展示出来的各种症状(数据来自实例2) 虽然应用没有报障,但AWR报告里的各种迹象已经很明显了   (1)   gc buffer busy acquire排进了Top 5 Timed Foreground Events   图-1   (2)   除去DB CPU在gc buffer busy acquire之后的就是gc cr block busy了   图-2   (3)   2h21bq1mnc5kd这

oracle 常见等待事件及处理方法_oracle

看书笔记db file scattered read DB ,db file sequential read DB,free buffer waits,log buffer space,log file switch,log file sync 我们可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息,从而可确定出产生瓶颈的类型及其对象.v$session_wait的p1.p2.p3告诉我们等待事件的具体含义,根据事件不同其内容也不相同,下面就一

oracle等待事件3——高速缓冲内enq锁

6. enq:TC-contention 在手动执行检查点操作中,一部分需要获得TC锁(thread checkpointlock 或 tablespace checkpointlock )在获得TC锁过程中,若发生争用,则需要等待enq:TC-contention 事件.事实上获得TC锁的过程稍微复杂. 1) 服务器进程首先以X模式获得TC锁 2) 服务器进程将已获得的TC锁变更为SSX模式.同时,CKPT进程以SS模式获得该锁.CKPT获得锁后执行检查点操作. 3) 服务器欲重新以X模式获得

Oracle 等待事件 一

以前一直想整理一下关于Oracle 的等待事件,总是没时间.现在觉得应该着手做了,其中的一些知识来自于自己的一点研究,如有错误,望大家指正..... 一 Oracle等待事件主要有两类事件: 1 空闲等待  空闲等待意味着Oracle正在等待某种动作的发生,实际上并不是因为繁忙而等待,而是因为没有事情做所以等待,如:smon timer,SMON进程的一些操作时每隔一段实际循环执行的,即使系统不忙,此事件也不立即发生,而是等待计时器达到一定的时间才执行,此时出现的smon timer 等待事件,

【等待事件】等待事件系列(1)--User I/O类型

[等待事件]等待事件系列(1)--User I/O类型 1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ①  等待事件系列(1)--User I/O类型     Tips: ① 本文在ITpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaim