zoukankan      html  css  js  c++  java
  • db file scattered read 等待事件

    db file scattered read 等待事件:

    我们经常会见到db file scattered read等待事件,在生产环境中,这个等待事件可能更为常见。这个事件表明用户进程正在读数据到Buffer Cache中,等待直到I/O调用返回。db file scattered read发出离散读,将存储上连接的数据块离散的读入到多个不连续的内存位置。Scattered Read通常是多块读,在Full Table Scan或Fast Full Scan等访问方式下使用

    Scattered Read代表Full Scan,当执行Full Scan读取数据到Buffer Cache时,通常连续的数据在内存中的存储位置并不连续,所以这个等待被命名为Scattered Read(离散读)。每次多块读读取的数据块数量受初始化参数DB_FILE_MULTIBLOCK_READ_COUNT限制。下图简要说明了Scattered Read的数据读取方式。

    Scattered Read的数据读取

    从v$event_name视图可以看到,该等待有3个参数,分别代表文件号、起始数据块号、数据块的数量:

    sys@CCDB> select event#,name,parameter1,parameter2,parameter3 
      2  from v$event_name
      3  where name = 'db file scattered read'; 
        EVENT# NAME                           PARAMETER1   PARAMETER2   PARAMETER3
    ---------- ------------------------------ ------------ ------------ ------------
           132 db file scattered read         file#        block#       blocks

    数据文件号、起始数据号加上数据块的数量,通过这些信息可以知道Oracle Session正在等待的对象文件等信息。该等待可能和全表扫描(Full Table Scan)或者快速全索引扫描(Index Fast Full Scan)的连续读取相关,根据经验,通常大量的db file scattered read等待可能意味着应用问题或者索引缺失。

    在实际环境的诊断过程中,可以通过v$session_wait视图发现session的等待,再结合其他视图找到存在问题的SQL等根本原因,从而从根本上解决问题。

    当这个等待事件比较显著时,用户也可以结合v$session_longops动态性能视图来进行诊断,该视图中记录了长时间(运行时间超过6秒的)运行的事务,可能很多是全表扫描操作(不管怎样,这部分信息都是值得我们注意的)。

    从Oracle 9i开始,Oracle新增加了一个视图v$sql_plan用于记录当前系统Library Cache中SQL语句的执行计划,可以通过这个视图找到存在问题的SQL语句。

    可以过程v$sql_plan和v$sqltext联合,获得这些查询的SQL语句,查找全表扫描的SQL语句可以参考如下语句:

    select sql_text 
    from v$sqltext t,v$sql_plan p
    where t.hash_value = p.hash_value
      and p.operation = 'TABLE ACCESS'
      and p.options = 'FULL'
    order by p.hash_value,t.piece;

    查找Fast Full Index扫描的SQL语句可以参考如下语句:

    select sql_text
    from v$sqltext t, v$sql_plan p
    where t.hash_value = p.hash_value
      and p.operation = 'INDEX'
      and p.options = 'FULL SCAN'
    order by p.hash_value, t.piece;

    这些信息对于发现数据库问题,优化数据库性能具有极强的指导意义。

    在Oracle 10g中,Oracle对等待事件进行了分类,db file scattered read事件被归入User I/O一类

    sys@CCDB> select name,parameter1 p1,parameter2 p2,parameter3 p3,
      2  wait_class_id,wait_class#,wait_class                  
      3  from v$event_name                                     
      4  where name = 'db file scattered read';
    NAME                      P1         P2         P3         WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS
    ------------------------- ---------- ---------- ---------- ------------- ----------- ------------
    db file scattered read    file#      block#     blocks        1740759767           8 User I/O

    完成对等待事件的分类之后,Oracle 10g的ADDM可以很容易地通过故障分析定位到问题所在,帮助用户快速发现数据库的瓶颈及瓶颈的根源,这就是Oracle的ADDM专家系统的设计思想。

    转载:http://www.dbtan.com/2010/04/db-file-scattered-read.html

  • 相关阅读:
    poj 1684 Lazy Math Instructor(字符串)
    STL内存配置器
    迭代器(iterators)
    类型萃取(type traits)
    hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包+dp)
    hdoj 1114 Piggy-Bank(完全背包+dp)
    hdoj 2546 饭卡(0-1背包)
    hdoj 2620 Bone Collector(0-1背包)
    U3d开发个人总结
    Android软键盘的用法总结
  • 原文地址:https://www.cnblogs.com/future2012lg/p/3229051.html
Copyright © 2011-2022 走看看