Oracle等待事件-db file scattered read

上一篇说了下 Oracle等待事件-db file sequential read-CSDN博客 ,这一篇说一下它的”孪生兄弟”   另外一个IO 等待事件 db file scattered read(数据库文件分散读)

如果 Oracle 在 SGA 的缓冲区缓存中没有用户请求的数据,则服务器进程会将相应的数据块从数据文件加载到缓冲区缓存中。 这称为常规路径 I/O。 传统的路径I/O可分为多块读取和单块读取。 多块读取方法是一次读取多个连续块的 I/O,而单块读取方法是一次只读取一个块的 I/O。

db file scattered read(数据库文件分散读取) 这个等待是说:进程正在等待从磁盘读取多个连续的数据块到SGA。分散读通常是多块读取这是跟db file sequential read本质不同的地方。在大多数情况下,说明正在进行full table scans(全表扫描)和index fast full scans (FFS)索引快速扫描。这在实际生产情况可能预示着一个低效的SQL正在执行(也可能说明硬件IO性能太差)。

在读取数据块的时候,块被读取到物理上批次不相邻的内存地址,所以取名为分散读取。

SQL语句在进行全表扫描的时候, Oracle进程一次最多读取 DB_FILE_MULTIBLOCK_READ_COUNT个连续的块。然后将读取的这些块(一般是大量的块)分散到SGA缓冲中。

另外一个比较隐藏的情况下也会发生db file scattered read: 就是在索引唯一扫描的时候执行多块读

这有点绕,怎么索引唯一扫描是单块读,也可能会发生多块读。这是有个oracle 隐藏行为再遍历唯一索引的时候会遍历整个索引树。优化器将倾向于索引预取。由参数_index_prefetch_factor 和_db_file_noncontig_mblock_read_count 控制。这种情况一般不会是问题的主要原因。

总结该等待一般发生在
1.全表扫描( full table scans )
2.索引快速全扫描( index fast full scans)

问题诊断:

1.直接查询视图,查看此刻实时的等待情况

SELECT INST_ID, EVENT, COUNT(*)
  FROM GV$SESSION
 WHERE WAIT_CLASS# <> 6
 GROUP BY INST_ID, EVENT
 ORDER BY 1, 3;

或者 实时查看当前那个会话等待过长

select * from v$session_Wait where event = 'db file scattered read' 

P1代表File ID,可通过dba_data_File视图的FILE_ID字段看出是哪个数据文件
P2代表 First block,即该块在数据库上开始的位置
P3代表块数,该值的取值范围为1-DB_FILE_MULTIBLOCK_READ_COUNT的值

查看对应的段:

SELECT segment_name, segment_type
  FROM dba_extents
 WHERE file_id = ''
   AND xx BETWEEN block_id AND (block_id + blocks - 1);

或者直接查询 全表扫描 和索引快速全扫描 的语句进行优化

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;


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;

2.AWR,ASH报告 查看sql ordered by Reads 等找到对应sqlid

awr里面查看高物理读的数据文件Tablespace IO Stats 和File IO Stats 区域来定位最多IO操作的表空间和数据文件

3.单个sql分析,可以使用10046 ,查看更多的细节 P3=128 说明每次读取128个数据块

WAIT #1: nam='db file scattered read' ela= 17628 p1=6 p2=56873 p3=128
WAIT #1: nam='db file scattered read' ela= 29881 p1=6 p2=57001 p3=128
WAIT #1: nam='db file scattered read' ela= 33220 p1=6 p2=57129 p3=128
WAIT #1: nam='db file scattered read' ela= 33986 p1=6 p2=57257 p3=96
WAIT #1: nam='db file scattered read' ela= 46372 p1=6 p2=65577 p3=128
WAIT #1: nam='db file scattered read' ela= 33770 p1=6 p2=65705 p3=128

问题解决:

实际问题还是底层I/O太慢(比如大于 20 毫秒),而不是等待时间过长。通常不喜欢这个等待事件,因为大量的db file scattered read意味着大量的IO,可能全表扫描发生了。

解决办法跟上篇Oracle等待事件-db file sequential read-CSDN博客的处理有很多共同的地方:

1.优化全表扫码的SQL,这个在99%的OLTP系统下面是必须干掉的。目标是减少物理读和逻辑读

2.索引快速扫描是不是高效的。执行计划中 HASH JOIN和SORT MERGE动作(operation)会导致scattered read

3.分区技术在大部分场景都能减少IO

4.大多数 OLTP 系统通常使用默认块大小(8 KB) 但是对于需要频繁扫描大量数据的DSS系统,使用较大的块可以提高性能

5.合理的配置参数设置,DB_FILE_MULTIBLOCK_READ_COUNT(影响全表扫描一次IO的数量,增大这个参数相当于减少IO次数,但也可能导致CBO 更加倾向走全表扫描)和 optimizer_index_cost_adj(CBO是倾向全表扫描还是走索引)

后续准备把oracle 常见的等待事件都总结一遍,欢迎关注下面公众号同步更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习之css选择器--基本选择器、关系选择器、属性选择器、复合选择器、伪类选择器

目录 基本选择器 结果 关系选择器 结果 父子关系 祖先后代关系 相邻兄弟关系 兄弟关系 ​编辑 属性选择器 结果 复合选择器 结果 伪类选择器 结果 伪类选择器-操作标签 结果 未访问 访问后 悬停 伪类选择器-操作表单 结果 伪类选择器-操作结构 结果 基本选择…

二叉树详解

二叉树详解 一:什么是树1:概念2:树的特点##3:树的一些重要概念 二:二叉树1:二叉树的概念2:二叉树的特点3:特殊的二叉树: 三:二叉树的性质四:二叉树的存储 一:什么是树 1:概念 树是一种非线性的数据结构,它是由n个节点组成的一个具有层次关系的集合,把它叫做树的原因是因为它看…

【网络原理】HTTP协议和使用Fiddler抓包

文章目录 &#x1f343;HTTP协议是什么&#xff1f;&#x1f340;理解 "应用层协议"&#x1f38d;HTTP 协议的工作过程&#x1f334;HTTP 协议格式&#x1f333;Fiddler抓包工具的使用&#x1f338;如何抓HTTPS的包&#xff1f; &#x1f38b;抓包工具的原理&#x1…

Vue2 和Vue3 双向数据绑定的区别和原理

Vue 2 和 Vue 3 的双向数据绑定原理基本相同&#xff0c;都是基于 JavaScript 的特性实现的&#xff0c;但在实现细节上有一些区别。 在 Vue 2 中&#xff0c;双向数据绑定是通过 Object.defineProperty 实现的。Vue 2 会使用 Object.defineProperty 为数据对象的每个属性创建…

Transformer的前世今生 day04(ELMO、Attention注意力机制)

ELMO 前情回顾 NNLM模型&#xff1a;主要任务是在预测下一个词&#xff0c;副产品是词向量Word2Vec模型&#xff1a;主要任务是生成词向量 CBOW&#xff1a;训练目标是根据上下文预测目标词Skip-gram&#xff1a;训练目标是根据目标词预测上下文词 ELMO模型的流程 针对Wor…

矩形相交问题

给出左下和右上的坐标&#xff0c;判断矩形是否相交&#xff0c;并求出相交的区域 思路&#xff1a;从矩形中点间的横纵坐标距离判断 矩形A&#xff1a;左下坐标&#xff08;A1&#xff0c;A2&#xff09;右上坐标&#xff08;A3&#xff0c;A4&#xff09; 矩形B&#xff1a;左…

科研学习|论文解读——了解在线环境中的多数观点形成过程:Facebook的探索性方法(IPM, 2018)

论文标题 Understanding the majority opinion formation process in online environments: An exploratory approach to Facebook 摘要 在在线社区的社会互动过程中,多数观点经常被观察到,但很少有研究用实证数据来解决这一问题。为了确定一个合适的理论视角来解释在…

软件推动开放自动化落地

当你唯一拥有的是一把锤子时&#xff0c;你周围的一切都是钉子。 软件是硬件设备的护城河&#xff0c;国际自动化厂商不遗余力地开发各种新型工业软件&#xff0c;其战略站在应用的制高点。以前我们追求硬件兼容&#xff0c;现在我们要致力于应用引领。如果我们拥有强大的SCADA…

js封装SDK 在VUE、小程序、公众号直接调用js调用后端接口(本文以vue项目为例)

1.封装一个js文件msgSdk.js 注意&#xff1a;需要修改这个请求地址 apiServiceAddress ;(function () {if (window.msgSdk) {return}var msgSdk (function () {var m_msgSdk thisvar apiServiceAddress"http://172.12.14.5:8000"this.I_SendHTTPRequest functi…

Linux账号管理与ACL权限设置

文章目录 Linux的账户和用户组用户标识符&#xff1a;UID与GID用户账号用户组&#xff1a;有效与初始用户组groups&#xff0c;newgrp 账号管理新增与删除用户&#xff1a;useradd、相关配置文件、passwd、usermod、userdel用户功能&#xff1a;id、finger、chfn、chsh新增与删…

HANA VIEW 用 ABAP 创建CDS VIEW,在生成ODATA

这里我们做ADT来创建 场景介绍:把hana中的一个底表,创建成ABAP的 CDS VIEW ,在把CDS VIEW 生成 OData 服务。 一、创建CDS Table Function 红框内根据自身情况填写 选择 Define Table Function with Parameters 创建 Data Definition 完整代码,定义 结构 , 也可以定义参…

Grok ChatLaw

Grok是马斯克旗下的AI公司推出的一款革命性产品&#xff0c;它提供了创新且可靠的数据分析和决策支持平台1。Grok的技术解决方案主要包括以下几个方面&#xff1a; 强大的数据处理能力&#xff1a;Grok能够处理大规模的数据&#xff0c;并从中提取出有价值的信息和洞察。 先进…

centos7安装jdk详细步骤(yum安装与手动安装)

centos7安装jdk详细步骤&#xff08;yum安装与手动安装&#xff09; 一、使用yum安装1. 准备工作2. 检查系统是否自带jdk3. 安装jdk 二、手动安装jdk1. 下载上传jdk2. 安装jdk3. 配置环境变量 一、使用yum安装 1. 准备工作 如果你的机器可以联网可以使用此方法 ping www.baidu…

Java基础学习笔记二

Java的加载与执行 Java既是编译型语言又是解释型语言 question&#xff1a;为什么JVM可以跨平台执行 answer &#xff1a; Java虚拟机&#xff08;JVM&#xff09;之所以能够跨平台执行&#xff0c;是因为它在不同操作系统上提供了一个统一的运行环境&#xff0c;实现了Java程…

‘‘ is not a package AttributeError: module ‘‘ has no attribute ‘__path__‘报错解决

报错&#xff1a; No module named ‘ldm.util’; ‘ldm’ is not a package AttributeError: module ‘ldm’ has no attribute ‘__ path__’ 原因&#xff1a; 1.首先这个引用没有被画横线&#xff0c;说明包存在&#xff0c;并且也在包目录底下添加了__init__.py文件 &am…

C++ Qt开发:QUdpSocket实现组播通信

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QUdpSocket组件实现基于UDP的组播通信…

四川易点慧电子商务抖音小店:值得信赖的购物新选择

随着互联网的飞速发展&#xff0c;电子商务平台如雨后春笋般涌现&#xff0c;为消费者提供了前所未有的购物便利。在众多电商平台中&#xff0c;四川易点慧电子商务抖音小店以其独特的魅力和优质的服务&#xff0c;赢得了广大消费者的青睐和信任。 四川易点慧电子商务抖音小店以…

C++中的Union: 内存与类型转换技巧

在C中&#xff0c;union是一种特殊的数据类型&#xff0c;允许在相同的内存位置存储不同类型的数据。union提供了一种高效地利用内存的方式&#xff0c;但同时也要求开发者更加小心地处理数据以避免类型错误。 1. 基本定义 union定义了一个可以存储多种类型但任意时刻只能存储…

Python之进程池、阻塞模式、非阻塞模式、进程间的通信、queue

非阻塞模式 # 当需要创建的子进程数量不多时&#xff0c;可以直接利用multiprocessing中的Process动态成生多个进程 # 但如果是上百甚至上千个目标&#xff0c;手动的去创建进程的工作量巨大&#xff0c;此时就可以用到multiprocessing模块提供的Pool方法. # 初始化Poo1时&…

HTTPS 为什么比HTTP安全?

HTTPS&#xff08;Hyper Text Transfer Protocol Secure&#xff09;比 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;更安全&#xff0c;主要是因为 HTTPS 在 HTTP 的基础上添加了 SSL/TLS 协议&#xff0c;用于对数据进行加密&#xff0c;保证数据在传输过程中的…