db file scattered read等待事件

作者简介:李晓朋,现就职于北京海天起点技术服务股份有限公司山东办事处,担任数据库工程师,获有OCP11g证书,具有多年数据库运维经验,主要服务于政府部门,熟悉Oracle数据库与linux系统日常维护工作,故障排查。

什么是db file scattered read

参考Mos文档Doc ID 34558.1

在生产环境中,这个等待事件可能更为常见。这个事件表明用户进程正在读数据到Buffer Cache中,等待直到I/O调用返回。db file scattered read发出离散读,将存储上连续的数据块离散的读入到多个不连续的内存位置。Scattered Read通常是多块读,在Full Table ScanFast Full Scan等访问方式下使用。Scattered Read代表Full Scan,当执行Full Scan读取数据到Buffer Cache时,通常连续的数据在内存中的存储位置并不连续,所以这个等待被命名为Scattered Read(离散读)。每次多块读读取的数据块数量受初始化参数DB_FILE_MULTIBLOCK_READ_COUNT限制。

v$event_name视图可以看到,该等待有3个参数,分别代表文件号、起始数据块号、数据块的数量:


数据文件号、起始数据号加上数据块的数量,通过这些信息可以知道Oracle Session正在等待的对象文件等信息。该等待可能和全表扫描(Full Table Scan)或者快速全索引扫描(Index Fast Full Scan)的连续读取相关,根据经验,通常大量的db file scattered read等待可能意味着应用问题或者索引缺失。

根据经验,通常大量的 db file scattered read 等待可能意味着应用问题或者索引缺失。在实际环境的诊断过程中,可以通过 v$session_wait 视图发现 Session 的等待,再结合其他视图找到存在问题的 SQL 等根本原因,从而从根本上解决问题。


Oracle 9i开始,Oracle新增加了一个视图v$sql_plan用于记录当前系统Library CacheSQL语句的执行计划,可以通过这个视图找到存在问题的SQL语句。

可以过程v$sql_planv$sqltext联合,获得这些查询的SQL语句,查找全表扫描的SQL语句可以参考如下语句:

查找全表扫描的 SQL 语句可以参考如下语句:

查找 Fast Full Index 扫描的 SQL 语句可以参考如下语句:

Oracle 10g之后的ADDM可以很容易地通过故障分析定位到问题所在,帮助用户快速发现数据库的瓶颈及瓶颈的根源,这就是OracleADDM专家系统的设计思想。

通过下图可以直观清晰地看到这个等待模型和ADDM结合实现的Oracle专家诊断系统。



未经允许不得转载:Oracle一体机用户组 » db file scattered read等待事件

相关推荐