【Oracle概念】-等待事件
原創文章,轉載請註明: 轉載自
本文連結地址:
等待事件:
很長時間以來,透過什麼樣的手段來衡量資料庫的狀況,發現資料庫的問題,最佳化資料庫的效能一直是人們廣為爭論的話題。從Oracle 7.0.12開始,Oracle引入了等待事件,隨即等待事件成為了資料庫效能最佳化的一個重要指導。
當一個程式連線到資料庫之後,程式所經歷的種種等待就開始被記錄,並且透過一系列的動態效能檢視進行展現。透過等待事件使用者可以很快地發現資料庫的效能瓶頸,從而進行針對性最佳化和分析。下面將著重介紹等待事件在Oracle研究及最佳化過程中的作用。
等待事件的起源:
等待事件的概念是在Oracle 7.0.12中引入的,大致有100個等待事件。在Oracle 9.0中這個數目增加到了大約150個,在Oracle 8i中大約有220個事件,在Oracle 9iR2中大約有400個等待事件,在Oracle 10gR2中大約有874個等待事件,而在最近的Oracle 11gR1中,等待事件的數目已經接近1000個了。
雖然不同的版本和元件安裝可能會有不同數目的等待事件,但是這些等待事件都可以透過查詢V$EVENT_NAME檢視獲得:
sys@TQGZS11G> select * from v$version where rownum <2;
BANNER
---------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
sys@TQGZS11G> select count(*) from v$event_name;
COUNT(*)
----------
997
研究Oracle的等待事件,v$event_name檢視是一個很好的開始,這個檢視記錄著當前資料庫支援的等待事件及其基本資訊。
Oracle的等待事件,主要可以分為兩類,即空閒(idle)等待事件和非空閒(non-idle)等待事件。空閒事件指Oracle正等待某種工作,在診斷和最佳化資料庫的時候,我們不用過多注意這部分事件。非空閒等待事件專門針對Oracle的活動,指資料庫任務或應用執行過程中發生的等待,這些等待事件是我們在調整資料庫的時候應該關注與研究的。
在Oracle 10g之中,Oracle的Statspack會建立一個檢視stats$idle_event記錄空閒等待事件:
sys@TQGZS> select * from stats$idle_event;
EVENT
----------------------------------------------------------------
AQ Proxy Cleanup Wait
ASM background timer
DIAG idle wait
EMON idle wait
KSV master wait
LNS ASYNC archive log
LNS ASYNC dest activation
... ...
rdbms ipc message
slave wait
smon timer
virtual circuit status
wait for activate message
wait for unread message on broadcast channel
wakeup event for builder
wakeup event for preparer
wakeup event for reader
wakeup time manager
70 rows selected.
從Oracle 10g開始,Oracle對等待事件進行了更為詳細的分類,v$event_name檢視也增加了相關分類的欄位:
sys@TQGZS> 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)
v$event_name檢視中的PARAMETER1、PARAMETER2、PARAMETER3非常重要,對於不同的等待事件引數其意義各不相同:
sys@TQGZS> select name,PARAMETER1,PARAMETER2,PARAMETER3 from v$event_name
2 where name = 'db file scattered read';
NAME PARAMETER1 PARAMETER2 PARAMETER3
------------------------- ---------- ---------- ----------
db file scattered read file# block# blocks
看一下Oracle 11gR1中主要分類及各類等待事件的個數:
sys@CCDB> select wait_class#,wait_class_id,wait_class,count(*) as "count"
2 from v$event_name
3 group by wait_class#,wait_class_id,wait_class
4 order by wait_class#;
WAIT_CLASS# WAIT_CLASS_ID WAIT_CLASS count
----------- ------------- --------------- ----------
0 1893977003 Other 632
1 4217450380 Application 15
2 3290255840 Configuration 21
3 4166625743 Administrative 51
4 3875070507 Concurrency 26
5 3386400367 Commit 2
6 2723168908 Idle 80
7 2000153315 Network 35
8 1740759767 User I/O 22
9 4108307767 System I/O 23
10 2396326234 Scheduler 3
11 3871361733 Cluster 47
12 644977587 Queueing 4
13 rows selected.
也可以透過查詢v$system_wait_class檢視獲得各類主要等待事件的等待時間和等待次數等資訊,透過分類以及統計資訊,可以很直觀地快速獲得資料庫的整體印象,在以下輸出中,可以看出資料庫的主要等待消耗在User I/O操作上:
sys@CCDB> select * from v$system_wait_class order by time_waited;
WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS TOTAL_WAITS TIME_WAITED TOTAL_WAITS_FG TIME_WAITED_FG
------------- ----------- --------------- ----------- ----------- -------------- --------------
2000153315 7 Network 11535832 8306 11483262 8110
3290255840 2 Configuration 456184 25674 451609 20704
4217450380 1 Application 3984 59682 3647 59273
644977587 12 Queueing 17 123524 5 265
2396326234 10 Scheduler 64048 337478 61590 311334
1893977003 0 Other 147742 391129 87429 301171
3386400367 5 Commit 4112399 709998 4110596 705566
4108307767 9 System I/O 15470338 1884575 376478 3002
3875070507 4 Concurrency 29235041 2342427 9841084 1233264
1740759767 8 User I/O 5517505 3054163 5167892 2632608
2723168908 6 Idle 45845622 4.8606E+10 12138330 3.7588E+10
11 rows selected.
從Oracle 11g開始,可以透過如下查詢來首先了解資料庫的空閒等待事件:
select name,wait_class from v$event_name where wait_class='Idle';
在Oracle 11g中,空閒等待已經增加到80個左右。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/645199/viewspace-681225/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【等待事件】ORACLE常見等待事件事件Oracle
- oracle等待事件Oracle事件
- Oracle 等待事件Oracle事件
- Oracle Mutex 等待事件OracleMutex事件
- oracle等待事件一Oracle事件
- Oracle 等待事件 一Oracle事件
- Oracle的等待事件Oracle事件
- 【TUNE_ORACLE】等待事件之等待事件類別Oracle事件
- ORACLE 常見等待事件Oracle事件
- oracle常見等待事件Oracle事件
- Oracle 空閒等待事件Oracle事件
- Oracle等待事件詳解Oracle事件
- ORACLE中的等待事件Oracle事件
- Oracle常見UNDO等待事件Oracle事件
- ORACLE等待事件詳解(轉)Oracle事件
- ORACLE等待事件:direct path writeOracle事件
- Oracle等待事件的種類Oracle事件
- Oracle 等待事件V$檢視Oracle事件
- Oracle 常見的等待事件Oracle事件
- oracle wait event 等待事件OracleAI事件
- Oracle-監控oracle的等待事件Oracle事件
- Oracle面試寶典-等待事件篇Oracle面試事件
- Oracle常見等待事件說明Oracle事件
- Oracle常見等待事件介紹Oracle事件
- oracle virtual circuit wait 等待事件OracleUIAI事件
- oracle的一些等待事件Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“direct path write”Oracle事件
- 【TUNE_ORACLE】等待事件之日誌等待“log file sync”Oracle事件
- 【等待事件】等待事件系列(5.1)--Enqueue(佇列等待)事件ENQ佇列
- oracle等待事件3構造一個Direct Path write等待事件和構造一個Log File Sync等待事件Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“direct path read”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“db file parallel write”Oracle事件Parallel
- 【TUNE_ORACLE】等待事件之IO等待“direct path write temp”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“read by other session”Oracle事件Session
- 【TUNE_ORACLE】等待事件之日誌等待“log file parallel write”Oracle事件Parallel
- Oracle等待事件之enq: TM – contentionOracle事件ENQ
- oracle等待事件之enq: CF – contentionOracle事件ENQ
- oracle常見的等待事件說明Oracle事件