等待事件

等待事件概覽
    * v$event_name:這個視圖記錄着當前數據庫支持的等待事件及其基本信息
    * Oracle 的等待事件主要能夠分爲兩類,即空閒(idle)等待事件和非空閒(non-idle)等待事件。
      空閒事件指 Oracle 正等待某種工做,在診斷和優化數據庫的時候,咱們不用過多注意這部分事件。
      非空閒等待事件專門針對 Oracle 的活動,指數據庫任務或應用運行過程當中發生的等待,這些等待事件是咱們在調整數據庫的時候應該關注與研究的。    
    
等待事件分類
    * Oracle 11g R2中主要分類及各種等待事件的個數    
    SELECT wait_class#, wait_class_id, wait_class, COUNT (*) AS "count"
    FROM v$event_name 
    GROUP BY wait_class#, wait_class_id, wait_class
    ORDER BY wait_class#;    
        
    WAIT_CLASS# WAIT_CLASS_ID WAIT_CLASS                                count
    ----------- ------------- ---------------------------------------------------------------- ----------
          0    1893977003 Other                                   958
          1    4217450380 Application                                   17
          2    3290255840 Configuration                                24
          3    4166625743 Administrative                               55
          4    3875070507 Concurrency                                   33
          5    3386400367 Commit                                    2
          6    2723168908 Idle                                       96
          7    2000153315 Network                                   35
          8    1740759767 User I/O                                   48
          9    4108307767 System I/O                                   32
         10    2396326234 Scheduler                                    8
         11    3871361733 Cluster                                   50
         12        644977587 Queueing                                    9

    13 rows selected.
    SQL>     

    
從等待發現歷史瓶頸    
    * 經過查詢 V$SYSTEM_WAIT_CLASS 視圖得到各種主要等待事件的等待時間和等待次數等信息,經過分類以及統計信息,能夠很直觀地快速得到數據庫的總體印象。
    SQL>  set  numwidth 30
    SQL>  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
    ------------- ----------- ---------------------------------------------------------------- ----------- ----------- -------------- --------------
       2396326234          10 Scheduler                                                               4882        3504           4654           3246
       3386400367           5 Commit                                                               5175978      573796        5165499         572165
       2000153315           7 Network                                                            777336459      749926      769131912         748125
       4217450380           1 Application                                                          4434302     7381881        4397678        7364695
       1893977003           0 Other                                                              100729436    17616970        8174372       16305755
       1740759767           8 User I/O                                                          6181252645    25640434     6153846672       24928475
       3875070507           4 Concurrency                                                         31874404    27587290       31626616       22056683
       4166625743           3 Administrative                                                      93480936    55969848           4832         184803
       4108307767           9 System I/O                                                         557921472    74836663       77811450         339619
       3290255840           2 Configuration                                                        2617482   105558521        2595392       99440746
       2723168908           6 Idle                                                              1034274573  1.1087E+11      746393167     3.2167E+10
       

    * 相關視圖:
      V$SESSION(V$SESSION_WAIT):會話當前正在發生的事件
      V$SESSION_EVENT :活動會話在其生命週期經歷的事件(對V$SESSION的累積)
      V$SYSTEM_EVENT :做爲數據庫總體等待事件保存(對V$SESSION_EVENT的累積)
      注意,V$SESSION_EVENT 或者 V$SYSTEM_EVENT 視圖的累積信息以及關於等待的平均計算,使咱們沒法得知個別等待消耗的時間長短。爲了解決這一問題,Oracle 10g 引入了一個新的視圖 v$event_histogram,經過這個視圖可
以看到等待事件的柱狀圖分佈,從而能夠對一個等待事件的具體分佈有進一步的瞭解。在如下查詢輸出中能夠看到,cursor: pin S wait on X 的競爭主要是 16至512 毫秒的競爭。可是注意等
待時間在 4096 毫秒左右的等待也有 2 次。

    SQL> set  numwidth 30
    SQL> SELECT event, wait_time_milli, wait_count
      2  FROM v$event_histogram WHERE event = 'cursor: pin S wait on X';    
    EVENT                                                                           WAIT_TIME_MILLI                     WAIT_COUNT
    ---------------------------------------------------------------- ------------------------------ ------------------------------
    cursor: pin S wait on X                                                                       1                          23116
    cursor: pin S wait on X                                                                       2                          14786
    cursor: pin S wait on X                                                                       4                          28929
    cursor: pin S wait on X                                                                       8                          55937
    cursor: pin S wait on X                                                                      16                    59049323576
    cursor: pin S wait on X                                                                      32                      440755320
    cursor: pin S wait on X                                                                      64                        8417963
    cursor: pin S wait on X                                                                     128                        4674251
    cursor: pin S wait on X                                                                     256                          13744
    cursor: pin S wait on X                                                                     512                            379
    cursor: pin S wait on X                                                                    1024                             27
    cursor: pin S wait on X                                                                    2048                              0
    cursor: pin S wait on X                                                                    4096                              2

    13 rows selected.

    SQL>        

從等待肯定當前瓶頸
    * ASH
    * 肯定當前主要影響性能的等待事件
    col event format a30
    col p1text format a20
    select sid,event,p1,p1text from v$session where event not like '%client%';
    
    * 捕獲相關sql
    spool /home/oracle/sqltext.txt
    select sql_text from v$sqltext a
    where a.hash_value = (select sql_hash_value from v$session b where b.event = '經過上條SQL獲取等待事件')
    order by piece asc;
    spool off
    
    
    
相關文章
相關標籤/搜索