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

xfhuangfu發表於2022-11-05

      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部落格 ” ,連結:http://blog.itpub.net/28373936/viewspace-2922032/,如需轉載,請註明出處,否則將追究法律責任。

相關文章