重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1688|回复: 0
打印 上一主题 下一主题

[性能调整] 等待事件:db file scattered read(离散读)

[复制链接]
跳转到指定楼层
楼主
发表于 2023-2-8 16:24:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    db file scattered read等待事件:

         由于多数据块读操作产生的,当我们检索数据时从磁盘上读数据到内存中,一次I/O读取多个数据块,而数据块在内存中是分散分布并不是连续的,将存储中连续的数据块离散的读入到内存中不连续的位置,数据块被读取到内存的这个过程中会产生"db file scattered read"事件。

    出现的情况:
        1.FTS(full table scan)全表扫描或IFFS (index fast full scan) 快速索引全扫描

        在使用以上两种扫描时,为了保证性能会一次性读取多个块,称为multi block I/O。每次执行multi block I/O,都会等待物理I/O结束,此时出现等待事件:db file scattered read。
        参数db_file_multiblock_read_count是每次multi block I/O的数量的限制值。

        oracle在执行FTS时也执行single block I/O,这时即使FTS也会发生db file sequential read等待,比如:一个区有9个块,一次multi block I/O读取了8个块,则一次以multi block I/O读取之后的剩余一个块通过single block I/O读取。如果剩下的块有两个,就会执行multi block I/O,而且只读取两个块。这种情况经常发生时,引发多次的I/O,可能成为FTS速度下降的原因。

         2.index range scan索引范围扫描

         由于每次进行索引范围扫描操作时,都需要对索引叶块进行预取(prefetching)操作,而在删除和修改操作时候,oracle要对预取指数进行维护,因此出现了db file sequential read和db file scattered read等待事件。
         oracle有个隐含参数“_db_file_noncontig_mblock_read_count”定义了索引每次预期的数据块数,默认是11。


    解决方法:
       1.对相应的sql语句进行修改
       2.重建索引
       3.在WHERE条件中加入更多的索引字段


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-25 15:46 , Processed in 0.082581 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表