null event不是空事件,不是没有等待事件,而是Oracle忘记了刚才等待的事件的名字是什么了,但保留了该事件的真实情况。Oracle 的开发人员直到9.2.0.3才更新了这些事件名称。
那是不是我们每当遇到性能问题的时候都要patch到9.2.0.3呢?
我们已经知道他的真实情况依然在v$session_wait的P1、P2、P3参数里体现,所以,我们可以从这些参数顺藤摸瓜,找出这个null event 到底是什么等待事件。
下面是ITPUB上COPY过来的一些信息:
1. LCK processes to pick up extra or missed 'posts' (messages).
In all cases that can be identified the wait time is zero,
although on most ports this is changed to 1/100th second in
order to force the process to be rescheduled.
2. Multiple DB writers.
Two cases:
- When the master has sent i/o requests to the slaves, it
waits on this event for up to 6 seconds until the slaves
signal that the i/o is complete.
- The slaves wait on this event for up to 3 seconds whilst
waiting for requests from the master db writer.
目前已经被证实的会涉及到null event 的等待事件还有有SQL*Net message to client、 db file scattered (or sequential) read
待续
===========================
自己机器上的测试:
[code]
SQL> select sid,event,p1,p2,p3 from v$session_wait;
SID EVENT P1 P2 P3
---------- ------------------------------ ---------- ---------- ----------
11 null event 2056367224 155 0
12 null event 1111838976 1 0
1 pmon timer 300 0 0
2 rdbms ipc message 300 0 0
3 rdbms ipc message 300 0 0
6 rdbms ipc message 180000 0 0
7 rdbms ipc message 300 0 0
4 rdbms ipc message 300 0 0
5 smon timer 300 0 0
9 SQL*Net message from client 1111838976 1 0
8 wakeup time manager 0 0 0
11 rows selected.
[/code]
sid为12的null event的等待事件与sid为9的是一样的--”SQL*Net message from client“
============================================