作家
登录

Oracle中常见的33个等待事件小结

作者: 来源: 2017-10-25 09:50:10 阅读 我要评论

 

5 .相干的几个视图

V$SESSION:代表数据库晃荡的开端,视为源起。

V$SESSION_WAIT:视图用以及时G录晃荡SESSION的等待情况,是当前信息。

V$SESSION_WAIT_HISTORY:是对V$SESSION_WAIT的简单加强,记录晃荡SESSION的比来10次等待。

V$SQLTEXT:当数据库出现瓶颈时,平日可以大年夜V$SESSION_WAIT找到那些正在等待资本的SESSION,

经由过程SESSION的SID,结合V$SESSION和V$SQLTEXT视图就可以捕获这些SESSION正在履行的SQL语句。

V$ACTIVE_SESSION_HISTORY:是ASH的核心,用以记录晃荡SESSION的汗青等待信息,每秒采样一次,这部分内容记录在内存中,期望值是记录一个小时的内容。

WRH#_ACTIVE_SESSION_HISTORY: 是V$ACTIVE_SESSION_HISTORY在AWR的存储地。

V$ACTIVE_SESSION_HISTORY中 的信息会被按期(每小时一次)的刷新到负载库中,并缺省保存一个礼拜用于分析。

ID: 在10g之前,这个值表示一个等待时光的原因,10g之后则表示等待事宜的类别。

V$SYSTEM_EVENT: 因为V$SESSION记录的是动态信息,和SESSION的生命周期相干,而并不记录汗青信息,所以ORACLE供给视图V$SYSTEM_EVENT来记录数据库自启动以来所有等待事宜的汇总信息。经由过程这个视图,用户可以敏捷获得数据库运行的总体概况。

33个常见的等待事宜

1. Buffer busy waits

大年夜本质上讲,这个等待事宜的产生仅说清楚明了一个会话在等待一个Buffer(数据块),然则导致这个现象的原因却竽暌剐很多种。

常见的两种是:

  • 当一个会话试图修改一个数据块,但这个数据块正在被另一个会话修改时。
  • 当一个会话须要攫取一个数据块,但这个数据块正在被另一个会话攫取到内存中时。

Oracle 操作的最小单位是块(Block),即使你要修改一笔记录,也须要对这笔记录地点的┞封个数据块做操作。 当你对这个数据块做修改时,其他的会话将被阻拦对这个数据块上的数据做修改(即使其他用户修改的不是当前用户修改的数据),然则可以以一致性的方法攫取这个数据块(from undo)。当前的用户修改完这个数据块后,将会急速释放掉落加在这个数据块上的排他锁,如许另一个会话就可以持续修改它。修改操作是一个异常短暂的时光,这种加锁的机制我们叫Latch。

当一个会话修改一个数据块时,是按照以下步调来完成的:

  • 以排他的方法获得这个数据块(Latch)
  • 修改┞封个数据块。
  • 释放Latch。

Buffer busy waits等待事宜常见于数据库中存在热块的时刻,当多个用户频繁地攫取或者修改同样的数据块时,这个等待事宜就会产生。 如不雅等待的时光很长,我们在AWR或者statspack 申报中就可以看到。

  1. /* Formatted on 6/27/2011 1:06:09 PM (QP5 v5.114.809.3010) */ 
  2.  SELECT  name
  3.           parameter1, 
  4.           parameter2, 
  5.           parameter3 
  6.   FROM  v$event_name 
  7.   WHERE  name = 'buffer busy waits'
  8.  NAME                  PARAMETER1  PARAMETER2  PARAMETER3 
  9.  --------------------  ----------  ----------  ---------- 
  10.  buffer busy waits    file#        block#      class#  

鄙人面的示例中,萌芽的办法和这个一样,所以其他事宜对参数的萌芽将不做过多的解释。

File#: 等待拜访数据块地点的文件id号。

Blocks: 等待拜访的数据块号。

2. Buffer latch

内存中数据块的存放地位是记录在一个hash列表(cache buffer chains)傍边的。当一个会话须要拜访某个数据块时,它起重要搜刮这个hash 列表,大年夜列表中获得数据块的地址,然后经由过程这个地址去拜访须要的数据块,这个列表Oracle会应用一个latch来保护它的完全性。 当一个会话须要拜访这个列表时,须要获取一个Latch,只有如许,才能包管这个列表在这个会话的浏览傍边不会产生变更。

产生buffer latch的等待事宜的重要原因是:

  • Buffer chains太长,导致会话搜刮这个列表花费的时光太长,使其他的会话处于等待状况。
  • 同样的数据块被频繁拜访,就是我们平日说的热快问题。

产生buffer chains太长,我们可以应用多个buffer pool的方法来创建更多的buffer chains,或者应用参数DB_BLOCK_LRU_LATCHES来增长latch的数量,以便于更多的会话可以获得latch,这两种办法可以同时应用。

这个等待事宜有两个参数:


  推荐阅读

  芯片开源成功难 谁来挑战ARM架构?

沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散! 这场开源活动大年夜软件而起,>>>详细阅读


本文标题:Oracle中常见的33个等待事件小结

地址:http://www.17bianji.com/lsqh/38167.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)