zoukankan      html  css  js  c++  java
  • OWI之db file scattered read

    Oracle在执行全表扫描(full table scan)或全索引扫描(index full scan)时,为保障性能,尽量一次性读取多个块,这称为Multi Block I/O.
    
    每次执行Multi Block I/O,都会等待物理I/O结束,此时等待db file scattered read 事件。
    
    利用db file scattered read 等待事件的P1=file#
    
    
    SQL> show parameter multi
    
    NAME				     TYPE	 VALUE
    ------------------------------------ ----------- ------------------------------
    db_file_multiblock_read_count	     integer	 128
    
    SQL> alter system set db_file_multiblock_read_count=10000;
    
    System altered.
    
    SQL>  show parameter multi
    
    NAME				     TYPE	 VALUE
    ------------------------------------ ----------- ------------------------------
    db_file_multiblock_read_count	     integer	 4096
    
    SQL>  alter system set db_file_multiblock_read_count=999999999;
    
    System altered.
    
    SQL>  show parameter multi
    
    NAME				     TYPE	 VALUE
    ------------------------------------ ----------- ------------------------------
    db_file_multiblock_read_count	     integer	 4096
    
    这个值每个OS都有最大值的限制,可以看到此环境最大值只能设置为4096
    
    db_file_multiblock_read_count 针对的是物理读
    
    
    
    Oracle在执行FTS时也执行Single Block I/O,这时即便是FTS也会发生db file sequential read 等待。FTS上使用
    
    Single Block I/O或读取比MBRC值小的块数的情况如下:
    
    1) 达到区的界线时:如果一个区有9个块,一次Multi Block I/O读取8个块
    
    则一次以上Multi Block I/O读取之后的剩下一个块通过Single Block I/O读取。如果剩下的块有2个,就会执行Multi Block I/O,而且只读取两个块。
    
    2)扫描过程中读取被缓存的块时,如读取8个块时,若其中第三个块被缓存,Oracle将前两个块通过Multi Block I/O读取,对于第三个块执行一次Logical I/O,
    
    剩下的5个块通过Multi Block I/O读取。这种情况经常发生时,因引发多次的I/O,可能称为FTS速度下降的原因
    
    3)存在行链接时,在执行FTS的过程中,如果发现了行链接,Oracle为了读取剩下的行引发附加的I/O,此时执行Single Block I/O.
    
    对于行链接和行迁移的不同点需要准确理解。
    
    
    行链接是在行的大小比块大小大的时候发生,因此使用更大的块或减少PCTFREE值之外,再没有可消除行链接的方法。
    
    行迁移起初记录到一个块里,但随着行的大小不断增大,块内没有空间时发生迁移。这时实际上行移动到另外的块,在原来的行里插入了指明转移后块和行位置的ROWID。
    
    行迁移特别是在通过索引扫描表时会给性能带来严重影响,这是因为读取一个行时需要读取2个或2个以上的块。行迁移对FTS带来的影响需要稍微留意。
    
    FTS是对HWM以下的所有块从头开始顺序读取的工作,在执行FTS过程中,Oracle如果遇到行迁移,则不会引发更多的Single Block I/O,而是继续工作。
    
    这是因为知道反正要扫描过程中需要重新读取. 因此如果HWM的位置相同,则不管行迁移存在与否,FTS自身性能几乎不变。
    
    当然如果发生了迁移,就会追加分配区。如果HWM移动得更远,就会给FTS的性能造成影响,消除行迁移时压迫留心以上部分。
    
    
    
    
    
    
    

  • 相关阅读:
    Java进阶(七)布隆过滤器
    NIO面试题
    TCP/IP面试题
    SPRING面试题
    SpringBoot(五)原理剖析:Transaction原理
    SpringBoot(四)原理剖析:AOP原理
    SpringBoot(三)原理剖析:IOC原理
    SpringBoot(二)原理剖析:AutoConfiguration原理
    mysql 安全更新
    查看端口占用
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352186.html
Copyright © 2011-2022 走看看