Oracle数据库上的V_ $ SYSTEM_EVENT极高的等待时间

我正在解决一个Oracle数据库,有一些一般性能问题。 我运行了以下查询:

SELECT event AS "Event|Name", total_waits "Total|Waits", round(time_waited / 100, 0) "Seconds|Waiting", total_timeouts "Total|Timeouts", average_wait / 100 "Average|Wait|(in secs)" FROM sys.v_$system_event e ORDER BY time_waited DESC; 

前几行返回如下。 数百万秒的等待时间! (相比之下,我们的其他数据库对于顶级赛事的等待时间是<10秒)。这些事件做了什么,什么可能导致这些大规模的等待时间呢? 数据库已经有30天了,所以我们看到了这么多时间的聚合。

 Event Name Waits Seconds Timeouts Avg Wait ---------------------- --------- -------- -------- -------- SQL*Net message from client 488397968 32050594 0 0.0656 rdbms ipc message 91335556 2455744 9529486 0.0269 DIAG idle wait 5214769 347077 5214769 0.0666 Streams AQ: qmn coordinator idle wait 186521 173696 93278 0.9312 Streams AQ: qmn slave idle wait 95359 173692 51 1.8215 Space Manager: slave idle wait 523165 173647 521016 0.3319 pmon timer 968303 173630 870108 0.1793 fbar timer 8770 173403 8713 19.7723 smon timer 14103 173278 7006 12.2866 log file sync 57967889 90402 649458 0.0016 og file parallel write 86618366 39509 0 0.0005 db file sequential read 244286101 11171 0 0 control file parallel write 1274395 3949 0 0.0031 db file scattered read 157316868 1635 0 0 db file parallel read 11948170 1190 0 0.0001 

来自客户端的 SQL Net消息”是数据库等待被客户端请求做某事的时间(我也将其解释为数据库处理的SQL Net请求数的一个指标 )。 AskTom有关于该事件的更多信息。 它看起来不是一个很长时间的平均等待,所以也许你有一个应用程序,使很多小的请求到服务器? 这是30天内的很多等待(平均每天16M)。

至于rdbms的ipc消息,这意味着(Oracle 10g Reference) :

后台进程(LGWR,DBWR,LMS0)使用这个事件来表示它们处于空闲状态,并且正在等待前台进程发送一个IPC消息来做一些工作。

从调整的angular度来看,这通常是非事件。 (伯利森)

仅从v $ system_event中进行select的用途是有限的。 该视图包含自数据库上次启动以来的所有等待事件的总等待时间和计数。 数据库启动的最后一次启动时间可能是一年前或几分钟前,但是无论哪种方式,我通常只对我的sql语句,批处理作业或最终用户感兴趣。 最终用户等待非空闲非后台等待,但v $ system_event包含所有事件,包括超过50个空闲事件以及许多等待后台,非用户,负责数据库的进程。 运行此查询,而不是运行此查询,然后尝试运行AWR报告或statspack报告,或查看Enterprise Manager中的性能或顶级活动屏幕。 查看数据库上正在发生的事情的一种快速方法是运行以下select语句:

 select nvl(s.username,s.program) username , s.sid sid , s.serial# serial , s.sql_hash_value sql_hash_value , substr(decode(w.wait_time, 0, w.event, 'ON CPU'),1,15) event , w.p1 p1 , w.p2 p2 , w.p3 p3 from v$session s , v$session_wait w where w.sid=s.sid and s.status='ACTIVE' and s.type='USER'; 

这将告诉你谁在等待谁在或请求CPU。 通过反复运行查询,您可以了解系统上存在哪些瓶颈。 Oracle的10g和更高版本的视图v $ active_session_history包含每秒采样一次的信息。 它比v $ system_event强大得多的数据,但数据可能很难挖掘。 要挖掘数据,您可以使用企业pipe理器的顶级活动屏幕,但如果您没有OEM,那么就有一个很酷的免费工具

http://timurakhmadeev.wordpress.com/2010/02/18/ash-viewer/