db file scattered read 等待事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了db file scattered read 等待事件相关的知识,希望对你有一定的参考价值。

db file scattered read 等待事件:
我们经常会见到db file scattered read  等待事件,在生产环境中,这个等待事件可能更为常见。这个事件表明用户进程正在读数据到Buffer Cache中,等待直到I/O调用返回。db file scattered read发出离散读,将存储上连续的数据块离散的读入到多个不连续的内存位置。Scattered Read通常是多块读,在Full Table Scan或Fast Full Scan等访问方式下使用。Scattered Read代表Full Scan,当执行Full Scan读取数据到Buffer Cache时,通常连续的数据在内存中的存储位置并不连续,所以这个等待被命名为Scattered Read(离散读)。每次多块读读取的数据块数量受初始化参数DB_FILE_MULTIBLOCK_READ_COUNT限制。下图简要说明了Scattered Read的数据读取方式。
从v$event_name视图可以看到,该等待有3个参数,分别代表文件号、起始数据块号、数据块的数量:
[email protected]> select event#,name,parameter1,parameter2,parameter3 
  2  from v$event_name
  3  where name = ‘db file scattered read‘; 
    EVENT# NAME                           PARAMETER1   PARAMETER2   PARAMETER3
---------- ------------------------------ ------------ ------------ ------------
       132 db file scattered read         file#        block#       blocks
数据文件号、起始数据号加上数据块的数量,通过这些信息可以知道Oracle Session正在等待的对象文件等信息。该等待可能和全表扫描(Full Table Scan)或者快速全索引扫描(Index Fast Full Scan)的连续读取相关,根据经验,通常大量的db file scattered read等待可能意味着应用问题或者索引缺失。
在实际环境的诊断过程中,可以通过v$session_wait视图发现session的等待,再结合其他视图找到存在问题的SQL等根本原因,从而从根本上解决问题。
当这个等待事件比较显著时,用户也可以结合v$session_longops动态性能视图来进行诊断,该视图中记录了长时间(运行时间超过6秒的)运行的事务,可能很多是全表扫描操作(不管怎样,这部分信息都是值得我们注意的)。
从Oracle 9i开始,Oracle新增加了一个视图v$sql_plan用于记录当前系统Library Cache中SQL语句的执行计划,可以通过这个视图找到存在问题的SQL语句。
可以过程v$sql_plan和v$sqltext联合,获得这些查询的SQL语句,查找全表扫描的SQL语句可以参考如下语句:
select sql_text from v$sqltext t,v$sql_plan p where t.hash_value = p.hash_value  and p.operation = ‘TABLE ACCESS‘   and p.options = ‘FULL‘ order by p.hash_value,t.piece;
查找Fast Full Index扫描的SQL语句可以参考如下语句:
select sql_text from v$sqltext t, v$sql_plan p where t.hash_value = p.hash_value and p.operation = ‘INDEX‘  and p.options = ‘FULL SCAN‘ order by p.hash_value, t.piece;
这些信息对于发现数据库问题,优化数据库性能具有极强的指导意义。
在Oracle 10g中,Oracle对等待事件进行了分类,db file scattered read事件被归入User I/O一类:
select name,parameter1 p1,parameter2 p2,parameter3 p3,wait_class_id,wait_class#,wait_class from v$event_name         where name = ‘db file scattered read‘;
NAME                      P1         P2         P3         WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS
------------------------- ---------- ---------- ---------- ------------- ----------- ------------
db file scattered read    file#      block#     blocks        1740759767           8 User I/O
完成对等待事件的分类之后,Oracle 10g的ADDM可以很容易地通过故障分析定位到问题所在,帮助用户快速发现数据库的瓶颈及瓶颈的根源,这就是Oracle的ADDM专家系统的设计思想。
通过下图可以直观清晰地看到这个等待模型和ADDM结合实现的Oracle专家诊断系统。

技术分享

转:http://www.360doc.com/content/16/0906/20/36335693_588898007.shtml

以上是关于db file scattered read 等待事件的主要内容,如果未能解决你的问题,请参考以下文章

Oracle等待事件之db file scattered read

db file sequential read等待事件

Oracle 等待事件之 db file sequential read

Oracle 等待事件之 db file parallel read

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

DB_FILE_MULTIBLOCK_READ_COUNT 与性能有关的参数