单块读

什么是单块读?
顾名思义,就是单个块单个块得读,等待事件表现为db file sequential read;

单块读有哪些情况?
大部分索引扫描是单块读(除index fast full scan),rowid回表是单块读,undo里读数据是单块读,行迁移行链接是单块读,读取段头是单块读,读边界块是单块读。

现在就来探讨下undo里读数据是单块读的情况:
--session1:
SQL> begin
  2  for x in 1..1000000 loop
  3  update t set id=999;
  4  end loop;
  5  commit;
  6  end;
  7  /

执行了太久了,不出结果
--session2:
SQL> select count(*) from t;

--session3:
SQL> @getsession_my

SID_SERIAL SQL_ID_NUM      P_NAME          P_VALUE         EVENT                     SQL_TEXT                MINUTE1 MINUTE_EXEC    INST_ID USERNAME
---------- --------------- --------------- --------------- ------------------------- -------------------- ---------- ----------- ---------- ----------
MACHINE
---------------
1,7        7kyc4rsrd3q1b,0 address         837617808       latch: cache buffers chai UPDATE T SET ID=999      469.68         7.1          1 SCOTT
                           number          150             ns
                           tries           0
lhj

29,871     cyzznbykb509s,0 file#           3               db file sequential read   select count(*) from        .98         .58          1 SCOTT
                           block#          398158                                     t
                           blocks          1
lhj

2 rows selected.

Elapsed: 00:00:00.09

--这里select count(*) from t 对应的等待时间为 db file sequential read

--隔一会再查还是一样
SQL> @getsession_my

SID_SERIAL SQL_ID_NUM      P_NAME          P_VALUE         EVENT                     SQL_TEXT                MINUTE1 MINUTE_EXEC    INST_ID USERNAME
---------- --------------- --------------- --------------- ------------------------- -------------------- ---------- ----------- ---------- ----------
MACHINE
---------------
1,7        7kyc4rsrd3q1b,0 count           1               Data file init write      UPDATE T SET ID=999      470.17        7.58          1 SCOTT
                           intr            256
                           timeout         4294967295
lhj

29,871     cyzznbykb509s,0 file#           3               db file sequential read   select count(*) from       1.47        1.07          1 SCOTT
                           block#          419088                                     t
                           blocks          1
lhj

2 rows selected.

Elapsed: 00:00:00.01

--file#对应的是undo表空间
SQL> select file_id,tablespace_name from dba_data_files where file_id = 3; 

   FILE_ID TABLESPACE_NAME
---------- ------------------------------
         3 UNDOTBS1                          --可见对应的是undo表空间

1 row selected.

Elapsed: 00:00:11.88

说明表在做dml的时候,此时再发出一个关于此表的查询,如果查询的数据刚好是dml的数据,那么是从undo表空间读取的。
undo有优点也有缺点:优点是能保证能保证数据的准确性,在修改数据之前,oracle会把要修改的copy到undo表空间,事务成功了则释放可重新利用undo,事务失败了则通过undo来回滚到dml之前。这是oracle独有的机制;缺点也很明显,就是undo里面读数据是单块读,速度非常慢。这也就是为什么很多数据库down掉之后,恢复要很长一段时间。

时间: 2024-08-25 11:33:36

单块读的相关文章

10046确认多块读无法跨区

SQL查询记录,记录是如何从磁盘中读取的呢? 有几种访问方式? 本次测试探讨数据文件离散读无法跨区,因此单块读(顺序读)存在特殊场景,一个表的一个块在某个区中,Oracle查询记录及时全表扫描,也会产生单块读现象. 文档结构如下: 1.解释说明oracle数据文件从磁盘读取有几种方式 2.创建测试对象,并进行多块读测试解释说明 3.创建测试环境,一个表已分配多个区,存在一个区只使用一个块,次数对测试表全表扫描,验证是否存在单块读现象. 一.解释说明oracle数据文件从磁盘读取有几种方式 EVE

拆分:分解单块系统——《微服务设计》读书笔记

通常,我们可能已有有一个巨大的单块系统,如何实现微服务,我们需要把它分解. 从哪里开始拆分:接缝 接缝:从接缝处可以抽取相对独立的一部分代码,对这部分代码的修改不会影响系统的其他部分.这些接缝就可以作为服务的边界. 那如何识别出接缝呢?我们可以使用前面所提到的限界上下文,也可通过程序中的命名空间来帮助我们,也可以通过工具来帮助我们,如structure101这样的工具来可视化包之间的依赖. 杂乱依赖的根源:数据库 为什么这么说?因为,通常情况下,我们在业务层的代码已经通过分层组织到相应的包中了,

转:Stack Overflow通过关注性能,实现单块应用架构的扩展能力

原文来自于:http://www.infoq.com/cn/news/2015/07/scaling-stack-overflow 在New York QCon 2015大会上,David Fullerton 深入解析了如何使用C#/ MS SQL支撑Stack Overflow网站的单块应用架构,这个网站每月处理40多亿的用户请求.Fullerton 认为,关注性能就可以几乎免费地使网站具备应付高并发的扩展能力:同时,通过减少对外部服务的调用,SOA开销(SOA tax) 得以避免. Full

【转】技改之路:从单块应用到微服务,我的血泪总结

技改是技术改造的简称,是技术的蜕变.技术改造,对于公司和技术人员而言都非常难得,参与者多,主导者少.我有幸前后主导过3次OTA系统的技改,规模有大有小,每次环境和问题虽不一样,但还是有套路可循. <技改之路>少讲技术多讲路,我们不过多的关注技术细节和中间件的实现,而重点讲述技术改造的过程和思考,以下是本次分享的Topic: 系统背景 前期工作 技改实施 总结 1 系统背景 1.技术规模 公司 国内领先的B2B机票分销平台 资本原始积累,财务良好,一直盈利 系统规模 200+应用 100+库,1

RAID5单块和多块硬盘故障如何恢复

RAID5是比较常见的磁盘阵列,具有比较高的容错能力,深得大家喜爱.虽然raid5容错性很高,但是也有遇到故障的时候,下面给大家分享遇到raid5单块和多块硬盘的故障如何恢复和硬盘数据恢复方法. RAID5单块硬盘故障恢复方法: 单个硬盘失效,我们通过热插拔拔下来再插上去.如热插拔没用在进入RAID配置界面,将该硬盘进行ForceOnLine操作.还可以通过更换其它硬盘插槽,切记不要打乱磁盘顺序.如果上面操作不能解决问题,尝试将该硬盘格式化后插入,然后使用ReBuild操作.在这过程中可能会遇到

RAID5容量计算方式:单块磁盘容量*(n-1)

RAID 5因为要容错.并行读取,就是少一个盘符的容量(容错备份用了),话说RAID 0更是减少一半盘符容量.具体的懒得自己打了,copy过来了:RAID5的可用磁盘数为:n-1.也就是说磁盘做RAID5后系统可使用容量为:单块磁盘容量*(n-1)所以你4块盘的RAID5,可用容量为:500G*(4-1)=1500G=1.5T RAID5把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意N-1块磁盘上都存储完整的数据,也就

三层应用与单块架构

1.1 三层应用架构的发展 1.1.1 三层应用架构的发展 层能够被单独构造 每层具有区别其他层的显著特点. 层与层之间能够相互链接,互相支撑,相互作用,相互协作,从而构成一个整体, 层的内部可以被替换成其他可工作的部分,但对整体影响不大 1.1.2 什么是三层架构 三层架构通常包括表示层,业务逻辑层以及数据访问层. 表示层 表示层部分通常指当用户使用应用程序时,看见的,听见的,输入的或者交互的部分.    业务逻辑层 业务逻辑层部分是根据用户输入的信息,进行逻辑计算或者业务处理的部分.  数据

[jquery]如何实现页面单块DIV区域滚动展示

// 未实现功能的代码 1(自己写的代码) var _cur_top = $(window).scrollTop(); var num = $(".class_section").length; var wH = $(window).height(); var t = []; var i = 0; $(window).scroll(function () { var sH = $(window).scrollTop(); var total = wH + sH; // 滚动条的高度 +

水池数目 ----- 图中有几个 单块的区域

水池数目 时间限制: 3000ms内存限制: 128000KB 64位整型: Java 类名: 上一题 提交 运行结果 统计 讨论版 下一题 题目描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上仅标识了此处是否是水池,现在,你的任务来了,请用计算机算出该地图中共有几个水池. 输入 第一行输入一个整数N,表示共有N组测试数据 每一组数据都是先输入该地图的行数m(0<m<100)与列数n(0<n<100),然后,输入