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中的可以在该视图得以展现。

更多参考

oracle中与归档相关的视图,Oracle OWI 等待事件历史视图及相关视图 - 一沙弥的世界...相关推荐

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

    Oracle提供的等待事件视图使得我们可以获取指定session以及实例级别等待事件的详细信息,这些视图分别是v$session_wait,v$session_event,以及v$system_eve ...

  2. oracle 查看日志组切换状态_【DB笔试面试800】在Oracle中,归档和非归档模式之间的不同点是什么?它们各自的优缺点是什么?...

    ♣题目部分 在Oracle中,归档和非归档模式之间的不同点是什么?它们各自的优缺点是什么? ♣答案部分 在Oracle数据库中,数据库可以设置为归档模式和非归档模式.归档模式保存所有的事务日志,包括在 ...

  3. 资源放送丨《Oracle中为什么没有Double Write?Oracle支持原子写吗?》PPT视频

    点击上方"蓝字" 关注我们,享更多干货! 前段时间,墨天轮邀请数据库资深专家 李真旭(Roger) 老师分享了<Oracle中为什么没有Double Write?Oracle ...

  4. oracle中exist什么意思,oracle中not exists 是什么意思 , oracle数据库中exists的作用

    导航:网站首页 > oracle中not exists 是什么意思 , oracle数据库中exists的作用 oracle中not exists 是什么意思 , oracle数据库中exist ...

  5. oracle txn,Oracle 11gR2上遇到blocking txn id for DDL等待事件,11gr2txn

    Oracle 11gR2上遇到blocking txn id for DDL等待事件,11gr2txn 本文是原创文章,转载请注明出处:http://blog.csdn.net/msdnchina/a ...

  6. oracle中触发器只能用于表吗,Oracle触发器的分类和使用

    Oracle触发器的分类和使用 摘要:在Oracle中,触发器是一种特殊的存储过程,它在发生某种数据库事件时由Oracle 系统自动触发.触发器通常用于加强数据的完整性约束和业务规则等,对于表来说,触 ...

  7. oracle中闪回和回滚,oracle闪回操作详解

    Oracle的闪回 oracle中为什么会有闪回呢!它的作用是什么呢?我们来学习一下闪回吧!闪回和回滚异曲同工之妙. 一闪回的介绍 (1)在Oracle的操作工程中,会不可避免地出现操作失误或者用户失 ...

  8. oracle中何时会用到join,Oracle中join用法的演示

    以下的文章主要介绍的是Oracle中join用法,如果你是其方面的新手,对Oracle中oin的实际用法很感兴趣,但是却找不到一些资料去对其进行更深入的了解的话,你不妨浏览以下的文章对其进行了解. O ...

  9. oracle改成归档模式_将Oracle数据库改为归档模式并启用Rman备份

    如下Linux环境下对单节点数据库采用文件系统情况的配置归档模式过程. 首先查看数据库归档模式和磁盘使用情况,确定归档文件放到什么位置: [oracle@gisdbserver ~]$ sqlplus ...

最新文章

  1. 【Matlab 控制】仿真多智体一致性分析,附代码
  2. linux 上安装ntop
  3. 谈谈你对云计算技术的看法
  4. android按下enter键如何让光标跳到下一个edittext,我们如何知道光标已经移动到edittext的下一行android...
  5. JavaOne 2015 –第二十版十大收获
  6. Matlab控制精度
  7. python字符串相关习题
  8. Bootstrap 3 : 图片上传预览 image upload preview
  9. webpack——快速入门【一】
  10. BP反向传播一文弄懂神经网络中的反向传播法
  11. python 格式化字符串 模板字符串(五分钟读懂)
  12. 【库安装】windows下Python安装protobuf
  13. 以太坊 链私有链环境搭建(windows)
  14. EXCEL VBA编程入门二:什么是VBA?什么是EXCEL VBA?
  15. mapper [pos] of different type, current_type [geo_point], merged_type [ObjectMapper]
  16. GCF(3)---GCF简介
  17. mysql frm idb_mysql/mariadb的数据恢复。没有libdata1,只有frm和idb文件的innodb的数据恢复...
  18. 人要是点背!那真是没整
  19. 新版HCIE考试有什么题型?各题型具体怎么考?
  20. TOMCAT服务器的安装与配置

热门文章

  1. html_三种常见格式的特点
  2. 12.unity编程基础
  3. ***学习笔记教程七:密码恢复
  4. 12、说说梯度下降法
  5. pythony第三章:列表、元组、字典和集合(1)
  6. 王道书 P360 T03(计数排序)
  7. 项目里用到的Jquery,json,struts2结合
  8. IM即时通讯系统优势,区块链社交APP如何搭建
  9. java 日期获取时间戳
  10. 使用UC浏览器安卓版访问大多数网站遇到400 bad request错误