V$SESSION.STATUS='ACTIVE' AND WAIT_EVENT='Idle'

尛樣兒發表於2011-11-08

        
        V$SESSION.STATUS='ACTIVE'表示當前會話正在執行SQL語句。
        WAIT_EVENT='Idle'表示伺服器程式處於空閒等待狀態。
        Idle這類事件屬於空閒等待型別,伺服器程式沒有工作可做,正在等待新的工作。通常情況,如果這類等待事件是瓶頸所在,那麼瓶頸不在資料庫資源上。當調整的時候,大多數空閒事件可以被忽略,因為這類等待時間不意味著傳統的效能瓶頸。一些空閒事件能用於表示沒有瓶頸,例如,這型別的事件通常會遇到空閒等待事件'SQL Net message from client',下表列出了空閒等待事件:

Idle Wait Events

Wait Name Background Process Idle Event User Process Idle Event Parallel Query Idle Event Shared Server Idle Event Oracle Real Application Clusters Idle Event

dispatcher timer

.

.

.

X

.

pipe get

.

X

.

.

.

pmon timer

X

.

.

.

.

PX Idle Wait

.

.

X

.

.

PX Deq Credit: need buffer

.

.

X

.

.

rdbms ipc message

X

.

.

.

.

smon timer

X

.

.

.

.

SQL*Net message from client

.

X

.

.

.

virtual circuit status

.

.

.

X

.


        V$SESSION.STATUS='ACTIVE' 和WAIT_EVENT='Idle'這兩種情況看似矛盾,但實際的工作中會經常出現這中情況。下面舉例說明這種情況:
1.所有的後臺程式一直處於V$SESSION.STATUS='ACTIVE'狀態,大部分時候這些後臺程式都沒有執行任何工作,所以V$SESSION.WAIT_EVENT='Idle'。

2.事務執行DML操作,但未提交,它的狀態也是這樣的,Oracle認為事務沒有提交,SQL語句就在執行,但程式並未執行任何的工作。

        由此可以看出,可以簡單的認為V$SESSION.STATUS表示的執行SQL的事務狀態,而V$SESSION.WAIT_EVENT表示的是會話對應的程式的狀態,如果WAIT_EVENT='Idle'的會話成為資料庫的瓶頸所在,那麼可能是Oracle自身的問題或者是配置的問題,可以排除是資料庫資源的問題導致的瓶頸。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23135684/viewspace-710459/,如需轉載,請註明出處,否則將追究法律責任。

相關文章