ITPub博客

首页 > 数据库 > Oracle > Oracle 19c中的等待事件分类 Event Waits

Oracle 19c中的等待事件分类 Event Waits

原创 Oracle 作者:xfhuangfu 时间:2022-11-05 21:43:08 0 删除 编辑

      Oracle数据库等待事件是7i开始引入的概念,是性能优化和故障诊断的重要依据。按服务器进程或线程递增的统计信息,指示必须等待事件完成之后才能继续处理。等待事件数据显示了可能会影响性能的问题的各种症状,如闩锁争用、缓冲区争用和I/O 争用。这些只是问题的症状,而不是实际的原因。等待事件按类别进行分组。等待事件的类别包括:管理、应用程序、簇、提交、并发、配置、空闲、网络、其它、调度程序、系统 I/O 和用户 I/O。

      Oracle19c数据库中大约有1920多个等待事件,包括"free buffer wait(空闲缓冲区等待"、"latch free(闩锁释放)"、"buffer busy waits(缓冲区忙等待)"、"db file sequential read(数据库文件顺序读取"和"db file scattered read(数据库文件分散读取)"。

      不同版本的等待事件数量不一样,但是都可以通过v$event_name视图来查询等待事件

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>
SQL> desc v$event_name
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EVENT#                                             NUMBER
 EVENT_ID                                           NUMBER
 NAME                                               VARCHAR2(64)
 PARAMETER1                                         VARCHAR2(64)
 PARAMETER2                                         VARCHAR2(64)
 PARAMETER3                                         VARCHAR2(64)
 WAIT_CLASS_ID                                      NUMBER
 WAIT_CLASS#                                        NUMBER
 WAIT_CLASS                                         VARCHAR2(64)
 DISPLAY_NAME                                       VARCHAR2(64)
 CON_ID                                             NUMBER
SQL>


注: PARAMETER1, PARAMETER2, PARAMETER3对每个等待事件的值都是不一样的。

在cdb的根容器中查询等待事件数量

SQL> select count(*) from v$event_name;
  COUNT(*)
----------
      1920


在pdb中查询等待事件数量

SQL> select count(*) from v$event_name;
  COUNT(*)
----------
      1920
SQL>



通过v$fixed_view_definition视图查看GV$EVENT_NAME的定义

SQL> SELECT view_definition FROM v$fixed_view_definition
  2  WHERE view_name='GV$EVENT_NAME';
VIEW_DEFINITION
--------------------------------------------------------------------------------
select inst_id, indx, ksledhash, kslednam, ksledp1, ksledp2, ksledp3,  ksledclas
sid, ksledclass#, ksledclass, ksleddsp, con_id  from x$ksled
SQL>


x$ksled基表是记录等待事件的描述

[E]vent Waits   X$KSLED - Event [D]escriptors


查询等待事件分类

SQL> select distinct WAIT_CLASS from v$event_name;
WAIT_CLASS
----------------------------------------------------------------
System I/O
Scheduler
Network
Application
Other
User I/O
Administrative
Commit
Queueing
Concurrency
Idle
Cluster
Configuration
13 rows selected.

等待事件说明

Idle              空闲

User I/O          用户I/O

System I/O        系统I/O

Network           网络等待

Application       应用等待 

Concurrency       并发等待

Commit            提交等待

Cluster           集群等待

Administrative    管理等待

Other             其他等待

Configuration     配置等待

Scheduler         排期等待

Queueing          队列等待

19c中各类等待事件的个数

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#;  2    3
  WAIT_CLASS# WAIT_CLASS_ID WAIT_CLASS                          count
------------- ------------- ------------------------------ ----------
            0    1893977003 Other                                1394
            1    4217450380 Application                            17
            2    3290255840 Configuration                          28
            3    4166625743 Administrative                         59
            4    3875070507 Concurrency                            56
            5    3386400367 Commit                                  5
            6    2723168908 Idle                                  140
            7    2000153315 Network                                30
            8    1740759767 User I/O                               59
            9    4108307767 System I/O                             40
           10    2396326234 Scheduler                              10
           11    3871361733 Cluster                                73
           12     644977587 Queueing                                9
13 rows selected.
SQL>




AWR报告中也记录了等待事件

AWR中的顶级等待事件

      从上面我们可以看出Oracle的等待事件份两大类:空闲(IDEL)和非空闲(NON-IDLE)。 空闲(IDEL)类的等待事件故障诊断和性能分析时可以忽略。非空闲 (NON-IDLE)的等待事件时针对数据库的任务或应用执行SQL等动作时发生的等待,这些等待事件对我们很重要。


-the end-

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28373936/viewspace-2922032/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Xiaofei Huangfu Oracle DBA,Oracle ACE Oracle 19c OCM12c OCM,11g OCM MySQL 5.6,5.7,8.0 OCP 18年以上IT从业经验,有丰富的数据库和开发领域经验,多年Oracle运维经验和java开发经验。

注册时间:2013-09-05

  • 博文量
    151
  • 访问量
    231217