[转帖]db file sequential read-数据文件顺序读取

db,file,sequential,read,数据文件,顺序,读取 · 浏览次数 : 0

小编点评

**db file sequential read 是一个 I/O 相关等待事件,通常与单个数据块相关的读取操作有关。** **awr 报告中 db file sequential read 的参数如下:** * **total time:** 2022-03-15 10:12:00 至 2022-03-15 10:15:00 的总等待时间,单位为毫秒。 * **avg time:** 2022-03-15 10:13:00 的平均等待时间,单位为毫秒。 * **foreground wait events:** 2022-03-15 10:12:00 至 2022-03-15 10:15:00 的等待事件数量。 * **db file sequential read:** 2022-03-15 10:12:00 至 2022-03-15 10:15:00 的 db file sequential read 的总等待时间,单位为毫秒。 * **db file sequential read avg:** 2022-03-15 10:13:00 的平均 db file sequential read 的时间,单位为毫秒。 **分析:** * **total time 和 avg time 很大**,说明等待事件持续时间较长。 * **foreground wait events 数值** 表示有许多等待在等待 db file sequential read。 * **db file sequential read 占总等待时间的比例** 约为 50%,说明它是等待事件中最重要的部分。 * **db file sequential read avg 较低**,说明等待事件平均持续时间较短。 * **db file sequential read 非常低**,说明数据库正在优化读取过程。 **结论:** db file sequential read 等待事件可能存在,但它不是一个严重的问题。通过优化数据库配置和索引配置,可以减少等待时间。

正文

https://www.cnblogs.com/xibuhaohao/p/9959593.html

 

等待事件: "db file sequential read" Reference Note (文档 ID 34559.1)

        这种等待事件是一种IO读请求相关的等待。与”db file scattered read“不同,因为”sequential read“是将数据读到连续的内存(注意:这里指的是读到相连的内存,不是说读取的是连续的数据块。同时一次”scattered read“可以读多个块,将他们分散到SGA的不同buffer)。这一事件通常显示与单个数据块相关的读取操作(如索引读取)。如果这个等待事件比较显著,可能表示在多表连接中,表的连接顺序存在问题,可能没有正确的使用驱动表;或者可能说明不加选择地进行索引。

        一次”sequential read“通常是单块读,尽管可能看到对于多个块的”sequential read“(见后面的描述)。这种等待也可能在数据文件头读取中看到(P2=1表明是读取文件头)。

 

ORACLE进程需要访问block不能从SGA中获取的时候,因此oracle进程会等待block从I/O读取到SGA;

一个顺序读是一个单块读,单块I/O一般来自索引读的结果;

db file sequential read等待事件有3个参数:

P1: The absolute file number             文件号

P2: The block being read                first block#     

P3: The number of blocks (should be 1)       block数量

db file sequential read等待时间是由于执行对索引,回滚(undo)段,和表(当借助rowid来访问),控制文件和数据文件头的单块读操作SQL语句(用户和递归)引起的。对于这些对象的物理I/O请求是很正常的,因此db file sequential read等待的存在不是一定意味库或应用出错了。如果会话在这事件上花了好长事件,它可能也不是一个糟糕的事情。相反,如果会话花了大量时间在equeue或latch free上,那么一定是有问题。

 

db file sequential read 是个非常常见的 I/O 相关的等待事件, 通常显示与单个数据块相关的读取操作, 在大多数的情况下, 读取一个索引块或者通过索引读取一个数据块时,都会记录这个等待。
这个等待事件有 3 个参数 P1、 P2、 P3,其中 P1 代表 Oracle 要读取的文件的绝对文件号, P2 代表 Oracle 从这个文件中开始读取的起始数据块块号, P3 代表读取的 BLOCK数量,通常这个值为 1,表明是单个 BLOCK 被读取。

 

SQL> select name,parameter1,parameter2,parameter3
2 from v$event_name where name='db file sequential read';
NAME PARAMETER1 PARAMETER2 PARAMETER3
------------------------------ ---------- ---------- ----------
db file sequential read file# block# blocks
在 Oracle 10g 中,这个等待事件被归入 User I/O 一类:
SQL> select name,wait_class
2 from v$event_name where name='db file sequential read';
NAME WAIT_CLASS
------------------------------ -------------------------
db file sequential read User I/O

图 9-16 简要说明了单块读取的操作方式。 

 

如果这个等待事件比较显著,可能表示在多表连接中,表的连接顺序存在问题,没有正
确地使用驱动表;或者可能索引的使用存在问题,并非索引总是最好的选择。 在大多数情况下, 通过索引可以更为快速地获取记录,所以对于一个编码规范、调整良好的数据库,这个等待事件很大通常是正常的。 有时候这个等待过高和存储分布不连续、连续数据块中部分被缓存有关,特别对于 DML 频繁的数据表,数据以及存储空间的不连续可能导致过量的单块读,定期的数据整理和空间回收有时候是必须的。
需要注意在很多情况下,使用索引并不是最佳的选择,比如读取较大表中大量的数据,
全表扫描可能会明显快于索引扫描,所以在开发中就应该注意,对于这样的查询应该进行避免使用索引扫描。
从 Oracle 9iR2 开 始 , Oracle 引 入 了 段 级 统 计 信 息 收 集 的 新 特 性 , 可 以 通 过 查 询V$SEGMENT_STATISTICS 视图,找出物理读取显著的索引段或者是表段, 研究其数据结构,看能否通过重建或者重新规划分区、存储参数等手段降低其 I/O 访问。
Oracle 9iR2 中,收集的统计信息共有 11 类

 

 

SQL> select * from v$segstat_name;
STATISTIC# NAME SAMPLED
---------- ---------------------------------------- ----------
0 logical reads YES
1 buffer busy waits NO
2 db block changes YES
3 physical reads NO
4 physical writes NO
5 physical reads direct NO
6 physical writes direct NO
8 global cache cr blocks served NO
9 global cache current blocks served NO
10 ITL waits NO
11 row lock waits NO
11 rows selected.
在 Oracle 10gR2 中,这类统计信息增加为 15 个:
SQL> select * from v$segstat_name;
STATISTIC# NAME SAM
---------- ------------------------------ ---
0 logical reads YES
1 buffer busy waits NO
2 gc buffer busy NO
3 db block changes YES
4 physical reads NO
5 physical writes NO
6 physical reads direct NO
7 physical writes direct NO
9 gc cr blocks received NO

10 gc current blocks received NO
11 ITL waits NO
12 row lock waits NO
14 space used NO
15 space allocated NO
17 segment scans NO
15 rows selected.
对于 CBO 模式下的数据库,应当及时收集统计信息,使 SQL 可以选择正确的执行计划,避免因为统计信息陈旧而导致的执行错误等。

 

问题:AWR报告中的系统的等待事件中的db file sequential read是否合理?

根据awr报告中的以下重要参数进行解读,以11G的awr报告为例子:

 

说明:db file sequential read是指sga中找不到相应的数据,所以跟buffer hit有很大的关系,当buffer hit命中率太低了,相应的db file sequential read就会高,一般buffer hit保持着95%以上;

 

查看这个报告的db file sequential read的总时间和平均时间;

 

Foreground Wait Events也会统计db file sequential read所花费的时间和平均时间

 

根据SQL User I/O等待时间,查看是否有调优的空间;

 

db file sequential read的优化方法:

从读取开始,增加SGA中buffer cache的大小,避免每次都从硬盘中去读数;

优化sql语句,减少不必要的块读取;

 

转自:https://blog.csdn.net/qq_34556414/article/details/80526243

 

与[转帖]db file sequential read-数据文件顺序读取 相似的内容:

[转帖]db file sequential read-数据文件顺序读取

https://www.cnblogs.com/xibuhaohao/p/9959593.html 等待事件: "db file sequential read" Reference Note (文档 ID 34559.1) 这种等待事件是一种IO读请求相关的等待。与”db file scatter

[转帖]全表扫描却产生大量db file sequential read一例

https://www.laoxiong.net/full-table-scan-but-lots-of-db-file-sequential-read%e4%b8%80%e4%be%8b.html 开发人员在进行新系统上线前的数据校验测试时,发现一条手工执行的SQL执行了超过1小时还没有返回结果。

[转帖]高斯DB的分类

作者:产业互联网资讯链接:https://www.zhihu.com/question/437148591/answer/1652870037来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 抛砖引玉!日前,国际研究机构Gartner发布2020年全球云数据库魔力象限报

[转帖]harbor-db restarting问题

现象: 在安装harbor后,启动时发现harbor-db 一直是restarting,/harbor-jobservice,/harbor-core 这两是starting 状态,如下图 解决: 1.查看你的数据库的挂载目录(对应的宿主机目录)是什么,去你的harbor的安装目录,例如我的是usr

[转帖]专注于GOLANG、PYTHON、DB、CLUSTER 记一次压测引起的nginx负载均衡性能调优

https://xiaorui.cc/archives/3495 rfyiamcool2016年6月26日 0 Comments 这边有个性能要求极高的api要上线,这个服务端是golang http模块实现的。在上线之前我们理所当然的要做压力测试。起初是 “小白同学” 起头进行压力测试,但当我看到

[转帖]面渣逆袭:二十二图、八千字、二十问,彻底搞定MyBatis!

https://cdn.modb.pro/db/334793 大家好,我是老三,面渣逆袭系列继续,这节我们的主角是MyBatis,作为当前国内最流行的ORM框架,是我们这些crud选手最趁手的工具,赶紧来看看面试都会问哪些问题吧。 基础 1.说说什么是MyBatis? MyBatis logo 先吹

[转帖]「国产CPU」行业研究报告

https://www.modb.pro/db/411004 作者|高禾投资研究中心行业研究组【课程预告】高禾投资研究中心拟于2022年4月26日起上线《基于价值投资的公司分析框架》主要介绍上市公司基本面分析方法和技巧。具体详情,请联系研究助理!「国产CPU」行业研究报告 1 CPU行业市场研究综述

[转帖]pg_hba.conf 中 md5 和 scram-sha-256 的区别

db: postgresql 11 auth-method 指定当一个连接匹配这个记录时,要使用的认证方法。下面对可能的选择做了概述,详见第 20.3 节。 trust 无条件地允许连接。这种方法允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的任意PostgreSQL数据库用户身

[转帖]小技巧!如何用 systemtap 排查问题

https://www.modb.pro/db/79444 霸爷博客,干货满满。有两篇文章现在还记得,《Linux下如何知道文件被哪个进程写》[1]和《巧用Systemtap注入延迟模拟IO设备抖动》[2],周末突然想起来,发现能看懂了:) 本文虽然说是小技巧,可是难度一点也不低 ^_^ 什么是 s

[转帖]强烈推荐| 郝大分享 GraphQL 实践的那些经历

https://www.modb.pro/db/150190 每隔一段时间就能看到一篇 GraphQL 的文章,但是打开文章一看,基本上就是简单的介绍下 GraphQL 的特性。很多文章其实就是 github 上找个 GraphQL 的项目,然后按照对应的 demo 跑起来而已。有些文章明显是没有完