• 等待、事件Oracle OWI 等待事件历史视图及相关视图by小雨


    本篇文章是一篇关于等待、事件-的帖子

            Oracle供给的等待事件图视使得我们可以取获指定session以及例实级别等待事件的详细信息,这些图视分别是v$session_wait,v$session_event,以及v$system_event。然而这几个图视对于历史等待事件力所不及。对此,Oracle也供给了历史等待事件图视v$session_wait_history,同时图视v$session_wait_class,v$system_wait_class也供给了基于等待类别的性能分析,面下是基于Oracle 10g对此开展的描述。

         

        1、图视v$session_wait_history

    --义生文望可知,v$session_wait_history图视供给了历史等待事件的信息。
    --v$session_wait_history与v$session_wait基本雷同,仅仅多出了SEQ#,EVENT#,WAIT_COUNT这三列。
    --SEQ#列表现SESSION按序顺到遇的等待事件,近来的等待事件为1,最远的为10。
    --通过该图视可以速快解了指定sid近来曾阅历了哪些等待(十全十美的是只供给近来的10个等待事件)。
    --当开始一个新的等待事件时,该图视中的信息将被新刷,记载最远间时的事件将会移出,同时最新的等待事件为1,其他向后移一个序顺号。
    --WAIT_TIME 列表现这个等待事件在会话中的等待间时。=0:表现正在等待事件成完;>0最后的等待间时。
    --WAIT_CONT列表现等待的次数。
    
    --查询历史sid
    goex_admin@SYBO2SZ> SELECT DISTINCT sid
      2    FROM v$session_wait_history h
      3   WHERE NOT EXISTS
      4            (SELECT 1
      5               FROM v$session_event
      6              WHERE sid = h.sid);
    
           SID
    ----------
          1062
          1065
          1060
    
    --面下查询sid为1062的历史等待事件信息
    --面下的查询可以看出该sid阅历了一系列的等待事件
    --seq#为10的明表是sql被析解到library cache时的等待
    --seq#为9的则是明表载加据数字典到缓冲区到遇的等待
    --seq#为7,8则明表在回返结果时阅历了db file sequential read等待
    --seq#为6明表以后sid所需的据数块在被读入buffer时,此时其他的session正在将该块读入buffer
    --seq#为1,2明表处于闲空等待,从WAIT_TIME为0也可知为闲空等待,之后该sid被关闭
    goex_admin@SYBO2SZ> select sid,seq#,event#,event,wait_time,wait_count from v$session_wait_history where sid=1062;
    
           SID       SEQ#     EVENT# EVENT                            WAIT_TIME WAIT_COUNT
    ---------- ---------- ---------- ------------------------------- ---------- ----------
          1062          1        257 SQL*Net message from client              0          1
          1062          2        253 SQL*Net message to client                0          1
          1062          3        116 db file sequential read                  9          1
          1062          4        257 SQL*Net message from client              0          1
          1062          5        253 SQL*Net message to client                0          1
          1062          6         67 read by other session                    6          1
          1062          7        116 db file sequential read                 11          1
          1062          8        116 db file sequential read                  1          1
          1062          9        205 latch: row cache objects                 9          1
          1062         10        212 latch: library cache                     5          1

        2、图视v$session_wait_class

    --该图视供给了以后连接到据数库例实的有所会话级的信息。
    --看查有所session等待类别
    goex_admin@SYBO2SZ>   SELECT wait_class#,
      2           wait_class,
      3           SUM (total_waits),
      4           SUM (time_waited)
      5      FROM v$session_wait_class
      6  GROUP BY wait_class#, wait_class
      7  ORDER BY 3, 4;
      
    WAIT_CLASS# WAIT_CLASS            SUM(TOTAL_WAITS) SUM(TIME_WAITED)
    ----------- --------------------- ---------------- ----------------
              1 Application                         42                0
              2 Configuration                     1219           110012
              5 Commit                            1332              154
              0 Other                            14387            19744
              4 Concurrency                      34092            74180
              8 User I/O                       1945820            42429
              9 System I/O                     3899256           731677
              7 Network                        4580071             9068
              6 Idle                          10577566       3175310702
    
    --从下面的查询来看,系统等待以Idle的形情占多数,系统体总运行好良。
    --为便于演示,我们可以看查是哪些sid致使了多过的User I/O
    goex_admin@SYBO2SZ>   SELECT sid,
      2           time_waited,
      3           total_waits,
      4           ROUND (time_waited / total_waits, 2) AS percnt
      5      FROM v$session_wait_class
      6     WHERE wait_class# = 8 AND ROWNUM < 2
      7  ORDER BY percnt;   
      
       SID TIME_WAITED TOTAL_WAITS     PERCNT
    ------ ----------- ----------- ----------
      1014       12088      186162        .06
    
    --一旦找到上述致使某类等待事件多过的sid,进一步可以找出对应的sql句语。其次也可以找出该sid阅历的有所等待事件。       
    
    --看查单个会话级的等待类别
    -- Author : Robinson
    -- Blog   : http://blog.csdn.net/robinson_0612
    --面下的查询可以看出sid为1083的session阅历等待最多的是网络等待
    goex_admin@SYBO2SZ> select * from  v$session_wait_class where sid=1083 order by 6 desc;
    
       SID    SERIAL# WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS         TOTAL_WAITS TIME_WAITED
    ------ ---------- ------------- ----------- ------------------ ----------- -----------
      1083         72    2000153315           7 Network                     11           0
      1083         72    2723168908           6 Idle                        10          15
      1083         72    4217450380           1 Application                  2           0
      1083         72    1740759767           8 User I/O                     2           3

        3、图视v$system_wait_class

    --该图视包含了v$session_wait_class图视的信息,示显的是自例实启动后等待类在例实级的总等待和等待间时。
    --该图视基于据数库体整等待事件类停止评估据数库性能,而非单个等待事件。
    
    --面下的查询中可以看出基于用户类的等待事件最多,应当会合focus 在User I/O这一块。
    SQL> select * from v$system_wait_class order by 4 desc;
    
    WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS            TOTAL_WAITS TIME_WAITED
    ------------- ----------- --------------------- ----------- -----------
       1740759767           8 User I/O                276741470     5086685
       2000153315           7 Network                 131198524      177709
       2723168908           6 Idle                     33734334  6334346903
       4108307767           9 System I/O               11799468     2288863
       3386400367           5 Commit                    1204500       91997
       3875070507           4 Concurrency                 51928       81428
       1893977003           0 Other                       38786       43836
       4217450380           1 Application                 28600       20398
       3290255840           2 Configuration               15309      296458
       4166625743           3 Administrative               1298       30917
    
    10 rows selected.

        4、图视v$event_histogram 

    --v$event_histogram图视是等待事件直方图。有点类似于列上应用的直方图,用于描述等待事件在特定等待间时段内的频度。
    --根据对某些特定等待事件的频度停止分析可以得出该等待事件是不是处于异常状态,进而取采进一步的办法。
    --对面下的查询结果停止分析
    
    goex_admin@SYBO2SZ> select * from v$event_histogram where event#=115;
    
        EVENT# EVENT                 WAIT_TIME_MILLI WAIT_COUNT
    ---------- --------------------- --------------- ----------
           115 log file sync                       1       1739
           115 log file sync                       2       1151
           115 log file sync                       4        374
           115 log file sync                       8       1637
           115 log file sync                      16       3281
           115 log file sync                      32       4070
           115 log file sync                      64       4308
           115 log file sync                     128       3698
           115 log file sync                     256       3491
           115 log file sync                     512       3556
           115 log file sync                    1024       6083
    --下面的查询中示展的是log file sync等待事件自本例实启动以来基于事件频度生发的次数。
    --在大于512ms至1024ms区间,该事件生发的次数竟然达到了6083次。即时是小于2ms的形情也现出了1739次。显著存在异常。
    --上述形情明表该据数库正在阅历重严的log file sync 事件。对于上述形情,我们在awr告报的top event中应当也会看到该等待事件。
    --log file sync等待事件和事务的交提回滚关相,明表存在多过的交提或短事务。应虑考量批交提以及日记件文巨细,缓冲巨细是不是理合。

        5、小结
      a、Oracle体供的等待事件可以速快定位指定sid正在阅历哪些等待。参考:Oracle OWI 等待事件图视
      b、可以通过v$session_wait_history图视查询历史等待事件近来的10个等待信息。
      c、图视v$session_wait_class供给了有所会话级的按等待事件类别来量度等待事件的详细信息。
      d、图视v$system_wait_class供给了全部例实级别(自例实启动后)的按等待事件类别来量度等待事件的详细信息。
      e、图视v$session_wait_class与图视v$system_wait_class是从体整(等待事件类)来考量以后系统的等待事件瓶颈,非单个等待事件。
      f、图视v$event_histogram为等待事件供给直方图信息,重严的等待事件,如现出在top event中的可以在该图视得以现展。

        更多参考

        PL/SQL --> 游标

        PL/SQL --> 隐式游标(SQL%FOUND)

        量批SQL之 FORALL 句语

        量批SQL之 BULK COLLECT 子句

        PL/SQL 合集的初始化与值赋

        PL/SQL 结合数组与嵌套表
    PL/SQL 变长数组
    PL/SQL --> PL/SQL记载

        SQL tuning 步调

        高效SQL句语必杀技

        父游标、子游标及享共游标

        绑定量变及其优缺点

        dbms_xplan之display_cursor数函的应用

        dbms_xplan之display数函的应用

        执行计划中各段字各模块描述

        应用 EXPLAIN PLAN 取获SQL句语执行计划

        Oracle ROWID

        NULL 值与索引(一)

        NULL 值与索引(二)

        用启 AUTOTRACE 功能

        数函使得索引列效失

        Oracle 绑定量变探窥

        Oracle 自适应享共游标

        Oracle 表空间与据数件文
    Oracle 密码件文
    Oracle 参数件文
    Oracle 机联重做日记件文(ONLINE LOG FILE)
    Oracle 控制件文(CONTROLFILE)
    Oracle 归档日记
    Oracle 回滚(ROLLBACK)和撤销(UNDO)
    Oracle 据数库例实启动关闭进程
    Oracle 10g SGA 的自动化管理
    Oracle 例实和Oracle据数库(Oracle体系结构) 

    文章结束给大家分享下程序员的一些笑话语录: 开发时间
      项目经理: 如果我再给你一个人,那可以什么时候可以完工?程序员: 3个月吧!项目经理: 那给两个呢?程序员: 1个月吧!
    项目经理: 那100呢?程序员: 1年吧!
    项目经理: 那10000呢?程序员: 那我将永远无法完成任务.

  • 相关阅读:
    CPU时间戳获取
    练手记录
    Fibonacci 2
    gjd
    hdu 5785 Interesting(manacher+前缀和)
    hdu 5782 Cycle(KMP+hash)
    hdu 5741 Helter Skelter(扫描线)
    Educational Codeforces Round 25 G. Tree Queries
    Educational Codeforces Round 25 F. String Compression(kmp+dp)
    Codeforces Round #423 (Div. 2) D. High Load(构造题)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3029025.html
Copyright © 2020-2023  润新知