我们经常会见到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个参数,分别代表文件号、起始数据块号、数据块的数量:
sys@CCDB> 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一类:
sys@CCDB> select name,parameter1 p1,parameter2 p2,parameter3 p3,
2 wait_class_id,wait_class#,wait_class
3 from v$event_name
4 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专家诊断系统。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/730933/viewspace-659468/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/730933/viewspace-659468/