[ORACLE]Oracle等待事件

等待事件由来:

以命中率为主要参考指标-->以等待事件为主要参考指标/以时间模型为主要参考指标

等待事件为了解决以命中率为指标的诸多弊端。与时间模型相比,等待事件以更加直观、细粒度的方式观察Oracle的行为,往往作为优化的重要入口。而时间模型,更侧重于整体、系统性的了解数据库运行状态。

等待事件分类

SQL> select BANNER_FULL from v$version;

BANNER_FULL
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

等待事件数量及大致分类

SQL> SELECT  wait_class#,wait_class_id,wait_class,COUNT ( * ) AS "count" FROM  v$event_name GROUP BY   wait_class#, wait_class_id, wait_class ORDER BY wait_class#;

WAIT_CLASS# WAIT_CLASS_ID WAIT_CLASS                                count
----------- ------------- ---------------------------------------------------------------- ----------
Other                                  1394
Application                                   17
Configuration                                28
Administrative                               59
Concurrency                                   56
Commit                                    5
Idle                                      140
Network                                   30
User I/O                                   59
System I/O                                   40
Scheduler                                   10
Cluster                                   73
Queueing                                    9
rows selected.

空闲与非空闲等待事件:

空闲等待事件,是指Oracle正等待某种工作,比如用sqlplus登录之后,但没有进一步发出任何命令,此时该session就处于SQL*Net message from/to client等待事件状态,等待用户发出命令,任何的在诊断和优化数据库的时候,一般不用过多注意这部分事件。

非空闲等待事件,专门针对Oracle的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件是调整数据库的时候应该关注与研究的。

等待事件是什么?

[ORACLE]Oracle等待事件

 每一个等待事件,都表明数据库的一种活动状态。从上面的查询可见,系统内置了很多等待事件,可以通过数据字典V$EVENT_NAME去了解每个等待事件。

相关视图

v$event_name 系统支持的等待事件,可以查看等待事件所属类别、参数的含义等信息。

v$system_wait_class  等待事件类别的统计信息(系统级)。通过这一视图,可从全局角度了解系统那类操作等待较多。

v$system_event 等待事件的统计信息(系统级)。展开来说,是提供了自实例启动后各个等待事件的概括。常用于获取系统等待信息的历史影象。而通过两个snapshot获取等待项增量,则可以确定这段时间内系统的等待项。

v$session_event 和v$system_event相类似,记录的是会话在其生命周期中各个等待事件的累计值。跟前者相比,增加了session_id信息。这些信息也会被同时累积到v$system_event中。需要注意的是,当一个会话重新建立时,统计信息将被设置为0。

v$session_wait、v$session 活动会话正在等待的资源或事件信息。V$SESSION_EVENT提供了累积的但不是非常详细的数据。可以通过历史视图v$session_wait_history获得历史信息。

v$session_wait_history 记录会话最近n次等待事件,即v$session_wait的历史记录。默认是记录10次,可进行修改。

v$event_histogram 这个视图记录了等待事件的柱状图分布,从而可以对一个等待事件具体分布有进一步了解。在v$session_event或v$system_event视图记录的是累积信息以及关于等待的平均值,无法得知个别等待消耗的时间。

 会话等待事件与各视图之间的关系

  • .一个会话一次只发生一个等待事件。如果看到了其他的等待事件,那仅仅表示在下一个时间片上发生了等待。在某个时刻只存在一个等待。

  • v$session_wait中的wait_time和second_in_wait字段以秒为单位,而v$session_event中的time_waited和average_wait字段是以百分之一秒为单位。

  • v$session_wait的等待事件结束后,v$session_event的统计信息将会发生改变。

  • v$session_wait的统计信息意义不大,因为信息是实时变化的。

  • 当v$session_wait里面的等待事件结束时,v$session_wait中的seconds_in_wait字段值被复制到v$session_event中time_waited字段,而v$session_event视图的average_time字段同时也被修改。