本帖最后由 wxjzqym 于 2012-6-1 10:27 编辑

为了更好的理解物理读和逻辑读的关系,模拟了以下实验:(DB 10.2.0.1.0 32bit)

1.在scott用户下创建测试表和相关索引

create table tl(id int,name varchar2(100));

begin ... end;(使用存储过程向表中插入1000条记录)

create index tl_idx on tl(id);(在id字段上创建一个b-tree索引)

2.第一次执行该sql(这是为了去掉recursive calls 对实验的影响)

select * from tl where id=1;

3.在sys用户下刷新buffer cache中的block(这是为了当再次执行sql时发生物理读)

alter system flush buffer cache;

4.在scott用户下再次执行sql(同时打开autotrace以观察执行计划和统计信息)

set autot on

select * from tl where id=1;

ID NAME

---------- ----------

1

执行计划

----------------------------------------------------------

Plan hash value: 4160527729

--------------------------------------------------------------------------------------

| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |        |     1 |     3 |     2   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| TL     |     1 |     3 |     2   (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN          | TL_IDX |     1 |       |     1   (0)| 00:00:01 |

--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - access("ID"=1)

统计信息

----------------------------------------------------------

0  recursive calls

0  db block gets

4  consistent gets

16  physical reads

0  redo size

460  bytes sent via SQL*Net to client

384  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1  rows processed

从以上结果发现该sql消耗了16个物理读和4个逻辑读,在这里我就疑惑了,为什么物理读的个数会超过逻辑读?

以我的理解,在没有发生直接路径访问的情况下,每个物理读都会被读入buffer cache中,所以应该一个物理读就会对应一个逻辑读啊。

怀疑可能是autotrace显示信息不够正确。于是再次模拟这个实验,这次与上次稍微不同,在第4步时没有开启autotrace的功能

而是用10046 trace代替。可结果依然是16个物理读+4个逻辑读,且sql执行过程中的等待事件为db file scatter read,

这里又不理解了,为什么走索引时却发生了这个等待事件,10046  trace内容如下:

=====================

PARSING IN CURSOR #4 len=28 dep=0 uid=65 oct=3 lid=65 tim=5977017214 hv=1673619045 ad='334be8ac'

select * from tl where id=99

END OF STMT

PARSE #4:c=0,e=654,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=5977017211

BINDS #4:

EXEC #4:c=0,e=363,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=5977045113

WAIT #4: nam='SQL*Net message to client' ela= 3 driver id=1111838976 #bytes=1 p3=0 obj#=-1 tim=5977045461

WAIT #4: nam='db file scattered read' ela= 19511 file#=4 block#=73 blocks=8 obj#=55362 tim=5977065349

WAIT #4: nam='db file scattered read' ela= 5828 file#=4 block#=65 blocks=8 obj#=55361 tim=5977071666

FETCH #4:c=0,e=26416,p=16,cr=3,cu=0,mis=0,r=1,dep=0,og=1,tim=5977072214

WAIT #4: nam='SQL*Net message from client' ela= 147 driver id=1111838976 #bytes=1 p3=0 obj#=55361 tim=5977072758

FETCH,tim=5977 #4:c=0,e=12,p=0,cr=1,cu=0,mis=0,r=0,dep=0,og=1073123

WAIT #4: nam='SQL*Net message to client' ela= 2 driver id=1111838976 #bytes=1 p3=0 obj#=55361 tim=5977073500

WAIT #4: nam='SQL*Net message from client' ela= 844 driver id=1111838976 #bytes=1 p3=0 obj#=55361 tim=5977074674

STAT #4 id=1 cnt=1 pid=0 pos=1 obj=55361 op='TABLE ACCESS BY INDEX ROWID TL (cr=4 pr=16 pw=0 time=26411 us)'

STAT #4 id=2 cnt=1 pid=1 pos=1 obj=55362 op='INDEX RANGE SCAN TL_IDX (cr=3 pr=8 pw=0 time=20023 us)'

WAIT #0: nam='SQL*Net message to client' ela= 1 driver id=1111838976 #bytes=1 p3=0 obj#=55361 tim=5977076054

从10046来看,发生了两次离散读,且每次都消耗了8个物理读,正好符合统计的数字,而文件号4的65和73正好是表和索引的位图块。

SQL> select extent_id,block_id,blocks from dba_extents where segment_name='TL' and owner='SCOTT';

EXTENT_ID   BLOCK_ID     BLOCKS

---------- ---------- ----------

0         65          8

SQL> select extent_id,block_id,blocks from dba_extents where segment_name='TL_IDX' and owner='SCOTT';

EXTENT_ID   BLOCK_ID     BLOCKS

---------- ---------- ----------

0         73          8

总的来说就是两个问题困扰着我:

1.以上执行的sql中为什么物理读大于逻辑读

2.执行计划中的index range scan为什么会发生db file scatter read等待事件

希望各位能够给予我解答,万分感谢!

oracle 物理读突然增加的原因_请教一个诡异的物理读比逻辑读还多的问题!!!!相关推荐

  1. 电源空间辐射CDN余量低_请教一个EMI问题:CE传导辐射在射频工作频点超标,求解决。...

    请教一个EMI问题:CE传导辐射在射频工作频点超标,求解决. budaqiu Post at 2011/10/10 11:37:28 大侠们,做EMC认证时,空间辐射RE通过,传导辐射CE发现在射频工 ...

  2. mysql怎么判断2个时间戳为同一天_请教一个需求js怎么判断时间戳是否属于同一天...

    思路就是把history数组处理成一个相同日期是在同一个数组成员内,再调整一下 addHisList 函数就可以 demo 链接:https://codepen.io/liangxh052... fu ...

  3. 常数乘以无穷大等于多少_请教一个数学问题:无穷大乘以无穷小等于多少?

    实在受不了了,只好出来说两句.好歹也是数学这一行的,看她被你们 糟蹋成这样实在不忍心. "无穷大量"和"无穷小量"在高等数学中都是趋于特定极限的变量的称呼, 一 ...

  4. php时间相减_请教一个PHP的时间戳转换成时间相减的問題?

    name.php 注册用户 用户名: 姓名: 密码: 确认密码: email: 进入: tenglu 回首页 join.php $userid=$_POST['userdi']; $name=$_PO ...

  5. python split 倒数第一个_请教一个在python中该如何去掉split之后的第一个单词?

    陪伴而非守候 123456789101112131415161718192021import re f = open('word.txt','r')word = f.read()f.close() # ...

  6. java 64内存不足_请教一个 Java 内存占用的问题

    第 1 条附言  ·  364 天前 2020-03-04 01:08:55.525 [HikariPool-1 housekeeper] WARN c.z.hikari.pool.HikariPoo ...

  7. python 修改列名_请教一个 Python 技巧(批量对 pandas.DataFrame()统一修改列名)

    首先,我搞了个这样的事: pdTable1 = pd.DataFrame() pdTable2 = pd.DataFrame() pdTable3 = pd.DataFrame() pdTable4 ...

  8. jpa级联添加_请教一个JPA多对多级联保存的问题

    实体类 // 标签类 @Entity public class Label { @Id @Column(name = "lid",unique = true,nullable = ...

  9. html5shiv 源码,javascript,_请教一个html5shiv源码插入样式的问题,javascript - phpStudy...

    请教一个html5shiv源码插入样式的问题 阅读html5shiv源码的时候,对addStyleSheet函数添加样式的方式有些困惑,特来请教 源码如下: function addStyleShee ...

最新文章

  1. 论文翻译_论文翻译的注意事项有什么?
  2. 10kv电压互感器型号_电气行业需要知道的10KV电压互感器基本技术参数
  3. 团队—贪吃蛇—需求分析
  4. vue.js axios实现跨域http请求接口
  5. 远程登录出现 身份验证错误 要求的函数不受支持
  6. Mongodb入门安装
  7. P2P中的NAT穿越方案
  8. Jquery 对象求和
  9. matlab 叉乘变点乘,向量点乘和叉乘
  10. 纳睿雷达IPO过会:拟募资近10亿 包晓军夫妇为加拿大人
  11. 环信WebIM 发送图片消息和显示图片 发送文件和显示文件 发送表情和显示表情
  12. 解读Verizon 2018数据泄漏调查报告:窃取身份仍是黑客最有效的攻击手段
  13. 解决linux不能上外网
  14. 小写金额转为中文大写
  15. 使用yagmail模块群发工资条
  16. CDN防盗链与有效使用CDN缓存
  17. drop box java_使用Dropbox Java API将文件上载到Dropbox
  18. html5 声控游戏,用声音来放大招吧!10款独具创意的声控游戏
  19. 基于stm32单片机可燃气体温湿度监测自动通风排气系统
  20. 【Mac】macOS无法验证此App不包含恶意软件 解决方法

热门文章

  1. trident API指南
  2. org.json使用指南
  3. 基于 Go 的内置 Parser 打造轻量级规则引擎
  4. HBase - Filter - 过滤器的介绍以及使用
  5. Word 2010 制作文档结构之章节自动编号
  6. 《深入理解Hadoop(原书第2版)》——2.3Hadoop系统的组成
  7. JavaScript之面向对象学习四原型对象的动态性
  8. Linux下搭建lamp论坛(phpwind+wordpress+discus)
  9. HDU 2757 Ocean Currents
  10. 用的fileupload组件实现的大文件上传