ITPub博客

首页 > 数据库 > Oracle > 【等待事件】db file scattered read

【等待事件】db file scattered read

原创 Oracle 作者:恩强Boy 时间:2021-01-12 14:53:31 0 删除 编辑

等待事件db file scattered read

等待事件说明

这个等待事件会在一个多块IO 完成时发生。它通常在“ FULL TABLE SCAN ”(全表扫描)和“ INDEX FAST FULL SCAN ”(索引快速全扫描)期间发生。 Oracle 每次读取 DB_FILE_MULTIBLOCK_READ_COUNT 连续的数据块,并将它们分散到 buffer cache 中的 buffer 中。如何做到这一点取决于你所运行的平台和 Oracle 版本。根据读取的设备类型和请求的块数量,它也有可能有所不同。

这个IO 是一个很正常的活动,而我们要注意的是不必要或缓慢的 IO 活动。如果等待多块读的时间很长,那么需要确定 Oracle 正在对哪些段 / 对象执行读操作。需要参考 AWR 中“ Tablespace IO ”和“ File IO ”,以及 ADDM ASH 输出。这些内容中应该显示哪些表空间 / 文件正在处理最多的 IO 请求,并显示了 IO 子系统的速度。表空间 / 文件涉及“ db file scattered read ”等待将会显示 "Av Blks/Rd">1 (值大于 1 表示发生了多块读)。还需要参阅 AWR 中“ SQL ordered by Reads ”,了解任何 SQL 导致高 IO 的线索。

如果启用了统计信息,那么v$sql_plan 也可以提供关于使用 FULL SCAN SQL 语句的线索。有的时候,查看哪些会话正在执行扫描并跟踪它们,以确定扫描是否在预期范围内是很重要的。以下语句可以查看哪些会话正在引起等待:

SQL> SELECT sid, total_waits, time_waited

FROM v$session_event

WHERE event='db file scattered read'

and total_waits>0

ORDER BY 3,2;

解决方法

理想情况下,当有一种更快、更有选择性的方法获取数据时,我们不希望应用程序的SQL 执行 FULL SCAN 。在这种情况下,我们应该使用查询调优来优化 SQL 。一些具体的 "db file scattered read" 调优方法如下:

- SQL 调优通常最有用,也是 IO 性能优化的核心

- 需要考虑使用分区来减少需要扫描的数据量

- 确定受影响的对象是否分布比较分散,如果是,可以对该对象进行缩小

- 考虑使用高级压缩来减少需要访问的块的数量

- 由于分散读是将数据块读取到不同缓冲区中,小心使用多个缓冲池和缓存选项可能会有所帮助

 

 

---- end ----


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31529886/viewspace-2749364/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
勤奋,专注和练习

注册时间:2018-04-03

  • 博文量
    68
  • 访问量
    136922