原创文章,转载请注明: 转载自dbtan 谈DB
本文链接地址: http://www.dbtan.com/2010/03/wait-event.html
等待事件:
很长时间以来,通过什么样的手段来衡量数据库的状况,发现数据库的问题,优化数据库的性能一直是人们广为争论的话题。从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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/645199/viewspace-681225/