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

db file sequential read (数据文件顺序读取):

db file sequential read是个非常常见的I/O相关的等待事件,通常显示与单个数据块相关的读取操作,在大多数的情况下,读取一个索引块或者通过索引读取一个数据块时,都会记录这个等待。

这个等待事件有3个参数P1,P2,P3,其中P1代表Oracle要读取的文件的绝对文件号,P2代表Oracle从这个文件中开始读取的起始数据块号,P3代表读取的BLOCK数量,通常这个值为1,表明是道单个BLOCK被读取。

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

在Oracle 10g/11g中,这个等待事件被归入User I/0一类

sys@CCDB> select name,wait_class
  2  from v$event_name
  3  where name = 'db file sequential read';
NAME                           WAIT_CLASS        
------------------------------ ------------------
db file sequential read        User I/O

下图简要说明了单块读取的操作方式:

如果这个等待事件比较显著,可能表示在多表连接中,表的连接顺序存在问题,没有正确地使用驱动表;或者可能索引的使用存在问题,并非索引总是最好的选择。在大多数情况下,通过索引可以更为快速地获取记录,所以对于编码规范、调整良好的数据库,这个等待事件很大通常是正常的。有时候这个等待过高和存储分布不连续、连续数据块中部分被缓存有关,特别对于DML频繁的数据表,数据以及存储空间的不连续可能导致过量的单块读,定期的数据整理和空间回收有时候是必须的。

需要注意在很多情况下,使用索引并不是最佳的选择,比如读取较大表中大量的数据,全表扫描可能会明显快于索引扫描,所以在开发中就应该注意,对于这样的查询应该进行避免使用索引扫描。

从Oracle 9iR2开始,Oracle引入了段级统计信息收集的新特性,可以通过查询v$segment_statistics视图,找出物理读显著的索引段或者是表段,研究其数据结构,看能否通过重建或者重新划分分区、存储参数等手段降低I/O访问。

Oracle 9iR2中,收集的统计信息共有11类:

SQL> select * from v$segstat_name; 
STATISTIC# NAME                                     SAMPLED 
---------- ---------------------------------------- --------- 
         0 logical reads                            YES 
         1 buffer busy waits                        NO 
         2 db block changes                         YES 
         3 physical reads                           NO 
         4 physical writes                          NO 
         5 physical reads direct                    NO 
         6 physical writes direct                   NO 
         8 global cache cr blocks served            NO 
         9 global cache current blocks served       NO 
        10 ITL waits                                NO 
        11 row lock waits                           NO 
11 rows selected.

在Oracle 10gR2/11gR1中,这类统计信息增加为15个:

sys@CCDB> select * from v$segstat_name;
STATISTIC# NAME                                SAM
---------- ----------------------------------- ---
         0 logical reads                       YES
         1 buffer busy waits                   NO
         2 gc buffer busy                      NO
         3 db block changes                    YES
         4 physical reads                      NO
         5 physical writes                     NO
         6 physical reads direct               NO
         7 physical writes direct              NO
         9 gc cr blocks received               NO
        10 gc current blocks received          NO
        11 ITL waits                           NO
        12 row lock waits                      NO
        14 space used                          NO
        15 space allocated                     NO
        17 segment scans                       NO
15 rows selected.

对于CBO模式下的数据库,应当及时收集统计信息,使SQL可以选择正确的执行计划,避免因为统计信息的陈旧而导致执行错误等。

db file sequential read (数据文件顺序读取)的更多相关文章

  1. Oracle 等待事件 db file sequential read

    db file sequential read-数据文件顺序读取 等待事件: "db file sequential read" Reference Note (文档 ID 345 ...

  2. [转帖] db file sequential read及优化

    http://blog.itpub.net/12679300/viewspace-1185623/ db file sequential read及优化 原创 Oracle 作者:wzq609 时间: ...

  3. db file sequential read等待事件的一点研究

    db file sequential read等待事件有3个参数:file#,first block#,和block数量. 这个等待事件有3个参数P1,P2,P3, 其中P1代表Oracle要读取的文 ...

  4. 全表扫描引发的db file sequential read

    今天我要做一个SQL调优,监控该SQL, 利用ASH 监控 该SQL是在sid=4848 上面跑的 db file sequential read等待事件有3个参数:file#,first block ...

  5. Oracle等待事件之db file sequential read/ db file parallel read

    1.产生原因 db file sequential read这个是非常常见的I/O 相关的等待事件.表示发生了与索引扫描相关的等待.意味着I/O 出现了问题,通常表示I/O竞争或者I/O 需求太多. ...

  6. oracle之 db file sequential read等待事件优化思想

    为什么db file sequential read事件在full table scan操作中显现,为什么在多块读中为什么会有单块读存在 ? extent的大小 :当扩展区中的最后一组块仅是1个块,o ...

  7. 何时会发生db file sequential read等待事件?

    很多网友对系统内频繁发生的db file sequential read等待事件存有疑问,那么到底在那些场景中会触发该单块读等待事件呢? 在我之前写的一篇博文<SQL调优:Clustering ...

  8. 常识之外:全表扫描为何产生大量 db file sequential read 单块读?

    原创 2016-07-05 熊军 Oracle   编辑手记:在理解Oracle技术细节时,我们不仅应该读懂概念,还要能够通过测试验证细节,理解那些『功夫在诗外』的部分,例如全表扫描和单块读. 开发人 ...

  9. 记一次insert因为db file sequential read影响性能导致性能原因的分析

    通过详细的10046 trace发现,大量的io等待分布在以下数据文件上:Misses in library cache during parse: 0Elapsed times include wa ...

随机推荐

  1. sql server UI怎么设置自增加id?

    设置表结构的时候,设置标识列就可以了啊 来自为知笔记(Wiz)

  2. MYSQL 当有两条重复数据时 保留一条

    delete from test  where id in (select id from (select  max(id) as id,count(text) as count from test ...

  3. Java笔记——面向切面编程(AOP模式)

    原文:http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html Aspect Oriented Programming  面向切面 ...

  4. Android 去掉title bar的3个方法

    1. Java代码实现 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance ...

  5. 如何配置LCD背光和LED,调试方法

    LCD背光和LED配置文件 alps/custom/<proj name>lk/cust_leds.c alps/custom/<proj name>/kernel/leds/ ...

  6. leetcode:Sort List(一个链表的归并排序)

    Sort a linked list in O(n log n) time using constant space complexity. 分析:题目要求时间复杂度为O(nlogn),所以不能用qu ...

  7. 非常非常非常好!path-sum-iii

    https://leetcode.com/problems/path-sum-iii/ 最终我还是没做出好的解法.还是看的别人的解法. 即使看了别人的解法,开始还实现错了. 还有很长的路要走. pac ...

  8. BZOJ 1821 部落划分

    kruskal.第k-1大的边. 其实prim会更快. #include<iostream> #include<cstdio> #include<cstring> ...

  9. tornado 实践 - 目录结构

    . ├── README.md └── store_management ├── Session.vim ├── auth │   ├── __init__.py │   ├── views.py ├ ...

  10. phpcms v9 搬家

    1.修改/caches/configs/system.php里面所有和域名有关的,把以前的老域名修改为新域名. 2.进入后台设置--站点管理,对相应的站点的域名修改为新域名. 3.点击后台右上角的更新 ...