海不辞水 故成其大 binss

20 04, 2006

如何解决等待事件 ‘db file scattered read’?

oracle 技术 — 作者 binss @ 14:48

如何解决等待事件 db file scattered read’?

产生原因:

该等待时间在数据库会话等待多块IO读取结束的时候产生,比如全表扫描和快速索引扫描。数据库同时读取初始化参数DB_FILE_MULTIBLOCK_READ_COUNT指定的块数并把这些数据块离散的分布在数据库缓冲区中。

诊断方法:

在会话级,查询视图V$SESSION_WAIT时如果有该事件存在,那么该视图中的

P1-表示文件编号

P2-表示块编号

P3-表示读取的块数

在实例级,通过查询视图V$FILESTAT并指定条件BLKS_READ/READS > 1(大于1表示有多个多块读取正在发生)可以判断出数据库正在读取那些文件。

通过下面的查询可以搜索出那些会话正在执行全表、快速索引扫描:

SELECT sid, total_waits, time_waited

FROM v$session_event

WHERE event='db file scattered read'

and total_waits>0

ORDER BY 3,2;

通常的解决方法:

在合适的字段上建立索引把表的访问方式从全表扫描变为索引扫描可以有效的降低物理IO;

对于大表,在合适的字段,比如年月、地区编码上建立分区把全表扫描变成分区扫描以减少物理IO;

把需要经常扫描的数据库表放在KEEP池同样会有效的降低物理IO;



最新回复


发表评论

Powered by pLog