萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> oracle教程 >> Oracle中常見的33個等待事件小結

Oracle中常見的33個等待事件小結

在Oracle 10g中的等待事件有872個,11g中等待事件1116個。 我們可以通過v$event_name 視圖來查看等待事件的相關信息  

一. 等待事件的相關知識

1.1 等待事件主要可以分為兩類,即空閒(IDLE)等待事件和非空閒(NON-IDLE)等待事件。
1). 空閒等待事件指ORACLE正等待某種工作,在診斷和優化數據庫的時候,不用過多注意這部分事件。
2). 非空閒等待事件專門針對ORACLE的活動,指數據庫任務或應用運行過程中發生的等待,這些等待事件 是在調整數據庫的時候需要關注與研究的。

 
在Oracle 10g中的等待事件有872個,11g中等待事件1116個。 我們可以通過v$event_name 視圖來查看等待事件的相關信息。

1.2 查看v$event_name視圖的字段結構
SQL> desc v$event_name;
 名稱                   是否為空? 類型
 ----------------------------------------- -------- ---------------
 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)

1.3 查看等待事件總數
11gr2:
SQL> select count(*) from v$event_name;
  COUNT(*)
----------
      1116
10gr2 rac:
sys@ORCL> select count(*) from v$event_name;

  COUNT(*)
----------
       889
10gr2:
SQL> select count(*) from v$event_name;

  COUNT(*)
----------
       874

 
1.4 查看等待事件分類情況
/* Formatted on 6/27/2011 12:54:45 PM (QP5 v5.114.809.3010) */
  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
----------- ------------- -------------------- ----------
          0    1893977003 Other                       717
          1    4217450380 Application                  17
          2    3290255840 Configuration                24
          3    4166625743 Administrative               54
          4    3875070507 Concurrency                  32
          5    3386400367 Commit                        2
          6    2723168908 Idle                         94
          7    2000153315 Network                      35
          8    1740759767 User I/O                     45
          9    4108307767 System I/O                   30
         10    2396326234 Scheduler                     7
         11    3871361733 Cluster                      50
         12     644977587 Queueing                      9

 
1.5 相關的幾個視圖
V$SESSION:代表數據庫活動的開始,視為源起。
V$SESSION_WAIT:視圖用以實時記錄活動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中 的信息會被定期(每小時一次)的刷新到負載庫中,並缺省保留一個星期
用於分析。
DBA_HIST_ACTIVE_SESS_HISTORY:視圖是WRH#_ACTIVE_SESSION_HISTORY視圖和其他幾個視圖的聯合展現,通常通過這個視圖進行歷史數據的訪問。
V$SYSTEM_EVENT: 由於V$SESSION記錄的是動態信息,和SESSION的生命周期相關,而並不記錄歷史信
息,所以ORACLE提供視圖V$SYSTEM_EVENT來記錄數據庫自啟動以來所有等待事件的匯總信息。通過這個視圖,用戶可以迅速獲得數據庫運行的總體概況。

 
二. 33個常見的等待事件

1. Buffer busy waits
從本質上講,這個等待事件的產生僅說明了一個會話在等待一個Buffer(數據塊),但是導致這個現象的原因卻有很多種。
常見的兩種是:
·          當一個會話試圖修改一個數據塊,但這個數據塊正在被另一個會話修改時。
·          當一個會話需要讀取一個數據塊,但這個數據塊正在被另一個會話讀取到內存中時。

Oracle 操作的最小單位是塊(Block),即使你要修改一條記錄,也需要對這條記錄所在的這個數據塊做操作。 當你對這個數據塊做修改時,其他的會話將被阻止對這個數據塊上的數據做修改(即使其他用戶修改的不是當前用戶修改的數據),但是可以以一致性的方式讀取這 個數據塊(from undo)。當前的用戶修改完這個數據塊

copyright © 萬盛學電腦網 all rights reserved