【指令碼】快速排除空閒等待事件得到敏感的非空閒等待事件

secooler發表於2009-09-10
想必大家都知道Oracle的等待時間分為兩種,一種我們稱之為“空閒等待事件”,另外一種稱之為“非空閒等待事件”。
“空閒等待事件”——作為DBA可以不用過分的關注這類等待事件。
“非空閒等待事件”——當DBA發現這一類的等待事件的時候,就要提高警惕了,因為這一類的等待事件出現後,往往說明應用程式出現了不應該有的等待問題,需要逐一的排查。

得到等待事件的動態效能檢視是v$session_wait,不過要快速的排除“空閒等待事件”得到我們關心的等待事件該如何做呢?
這裡給出我想到的三種方法。

這裡演示的資料庫版本是Oracle 10.2.0.3
sys@ora10g> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

1.第一種方法
如果資料庫中我們部署過statspack,那我們會得到一個比較有趣的檢視perfstat.stats$idle_event,這個檢視彙總了所有的空閒等待事件,我們排除這個檢視中的內容後就可以得到我們關心的內容了。
指令碼如下:
select sid,p1,p1raw,p2,p2raw,p3,p3raw,wait_time,seconds_in_wait,state,event
  from v$session_wait
 where event not in (select event from perfstat.stats$idle_event)

2.第二種方法
如果沒有部署statspack,可以透過系統的另外一個檢視得到近似的空閒等待事件的列表,這個檢視就是v$event_name,當wait_class欄位為“Idle”時,就可以得到空閒等待事件。
指令碼如下:
select sid,p1,p1raw,p2,p2raw,p3,p3raw,wait_time,seconds_in_wait,state,event
  from v$session_wait
 where event not in (select name from v$event_name where wait_class='Idle')
;

3.第三種方法
這種方法是比較“笨”的方法,不過也非常的有效,就是將我們知道的空閒等待事件統統的列到指令碼里。
指令碼如下:
select sid,p1,p1raw,p2,p2raw,p3,p3raw,wait_time,seconds_in_wait,state,event
  from v$session_wait
 where event not in (
'AQ Proxy Cleanup Wait',
'ASM background timer',
'DIAG idle wait',
'EMON idle wait',
'KSV master wait',
'LNS ASYNC archive log',
'LNS ASYNC dest activation',
'LNS ASYNC end of log',
'LogMiner: client waiting for transaction',
'LogMiner: slave waiting for activate message',
'LogMiner: wakeup event for builder',
'LogMiner: wakeup event for preparer',
'LogMiner: wakeup event for reader',
'Null event',
'PX Deq Credit: need buffer',
'PX Deq Credit: send blkd',
'PX Deq: Execute Reply',
'PX Deq: Execution Msg',
'PX Deq: Par Recov Execute',
'PX Deq: Signal ACK',
'PX Deq: Table Q Normal',
'PX Deq: Table Q Sample',
'PX Deque wait',
'PX Idle Wait',
'Queue Monitor Shutdown Wait',
'Queue Monitor Slave Wait',
'Queue Monitor Wait',
'SQL*Net message from client',
'SQL*Net message to client',
'SQL*Net more data from client',
'STREAMS apply coord waiting for slave message',
'STREAMS apply slave idle wait',
'STREAMS apply slave waiting for coord message',
'STREAMS capture process filter callback wait for ruleset',
'STREAMS fetch slave waiting for txns',
'STREAMS waiting for subscribers to catch up',
'Streams AQ: RAC qmn coordinator idle wait',
'Streams AQ: deallocate messages from Streams Pool',
'Streams AQ: delete acknowledged messages',
'Streams AQ: qmn coordinator idle wait',
'Streams AQ: qmn slave idle wait',
'Streams AQ: waiting for messages in the queue',
'Streams AQ: waiting for time management or cleanup tasks',
'Streams fetch slave: waiting for txns',
'class slave wait',
'client message',
'dispatcher timer',
'gcs for action',
'gcs remote message',
'ges remote message',
'i/o slave wait',
'jobq slave wait',
'knlqdeq',
'lock manager wait for remote message',
'master wait',
'null event',
'parallel query dequeue',
'pipe get',
'pmon timer',
'queue messages',
'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')
/


-- The End --

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

相關文章