重庆思庄oracle技术分享-等待事件:db file scattered read(离散读)

  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条件中加入更多的索引字段
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值