转载: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. 新Android工程src和layout文件夹为空

    问题:SDK和ADT版本冲突 解决方案: 1.菜单->Help->Install  New Software.. 2.在work with放入地址:http://dl-ssl.google ...

  2. Oracle 全文索引相关命令

    --用sys用户登录,解锁ctxsys用户alter user ctxsys account unlock; --授权给对应用户grant execute on ctx_ddl to yw; --用y ...

  3. fastdfs-client-java工具类封装

    FastDFS是通过StorageClient来执行上传操作的 通过看源码我们知道,FastDFS有两个StorageClient工具类.

  4. WPF如何用TreeView制作好友列表、播放列表

    WPF如何用TreeView制作好友列表.播放列表 前言 TreeView这个控件对于我来说是用得比较多的,以前做的小聊天软件(好友列表).音乐播放器(播放列表).类库展示器(树形类结构)等都用的是T ...

  5. 乙醇脱氢酶力场文件的处理(含ZN,NAD,乙醇)

    很多蛋白质在行驶生物催化反应(如ATP水解,氨基酸的乙酰化,CoA的去乙酰化,甲基化等等)都需要金属离子(Mg,Zn,Ca等等)的参与,换句话说,金属离子对蛋白功能是必须的.模拟金属酶体系,现在也是分 ...

  6. 给 Gradle 配置国内的 Maven 仓库,提高 jar 包下载速度。

    最近使用 gradle 跑一些 spring 的示例,在下载一些 jar 的时候速度特别慢,因为是访问的国外的 maven 仓库. 开源中国提供了国内的 maven 库,所以可以在 gradle 里设 ...

  7. 监听Activity进入后台(最小化),并根据时间判断是否超时,此解决办法可用于超时重登陆

    通过重写一个继承自Activity的基类中的onUserLeaveHint()方法,当用户按Home键等操作使程序进入后台时即开始计时,当用户使程序恢复为前台显示时执行onResume()方法,在其中 ...

  8. Linux操作系统基础(四)保护模式内存管理(2)【转】

    转自:http://blog.csdn.net/rosetta/article/details/8570681 Linux操作系统基础(四)保护模式内存管理(2) 转载请注明出处:http://blo ...

  9. GitHub的使用 —— 如何删除Repository

    如果要在GitHub上删除一个已经存在的Repository,该怎么办呢 ? 1.首先,点击这个资源(Repository),进入.会看到如下页面: 2.点击 Admin .在 Admin 页面的最下 ...

  10. 用xshell操作linux系统的常用命令

    (1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.doc 给出当前目录下以. ...