《Oracle逻 辑读写深入分析》之分析逻辑读次数受哪些因素的影响(笔记)[以跟踪文件中的事件来计数consistent gets次数,非用公式计算]

本文深入探讨了Oracle逻辑读次数受哪些因素影响,通过跟踪文件分析了全表扫描、当前模式读及索引扫描时的逻辑读情况,特别是涉及到一致性读、回滚段和UNDO数据块的读取。文中详细解释了不同操作下的逻辑读和物理读计数,并提到了排序操作对逻辑读的影响以及PGA内存和临时表空间的使用。
摘要由CSDN通过智能技术生成


跟踪文件里的一些字符串表示的意思:

kdstgr:表示数据块,即表对应的段中除了段头块外的块(存储数据行的)或是索引的对应的段中除了段头块外的块(存储索引条目的)。

Kdusru:  以当前模式读入,以用于更新操作(Read>(这里的(一致性读过程)例子是避免了用undo块来回滚数据这一情况的)

一、全表扫描 I
select *> //读取段头两次不是因为表里有两条数据行的关系,而是因为要进行一次>3.   
4.  2>7.   
8.  2 rows updated.   
9.   
10.  -- Session 2:   
11.  HELLODBA.COM>conn demo/demo   
12.  Connected.   
13.  HELLODBA.COM>alter system flush buffer_cache;   
14.   
15.  System altered.  
HELLODBA.COM>select * from tt;

                 1  recursive calls   
31.            0  db block gets   
32.           13  consistent gets   
33.            8  physical reads  
同样还是之前的那个小表的全表扫描,这里有 13 次逻辑读,比正常情况下多了 6 次。看看从跟踪文件中我们可以发现什么。
首先,和前面一样,它还是读取了 2 次段头(2 次读取表段头//读取段头两次不是因为表里有两条数据行的关系,而是因为要进行一次 kteinicnt 操作 kteinpscan 操作的关系。),然后读取高水位线下的普通数据块(4 次读取表数据块)。当读取到(内存)地址为140e64f的普通数据块 时,这个数据块是第一块被读取到的含有被其他事务修改过数据的数据块。这时,Oracle读取了回滚段的段头(1 次读取回滚段头)中事务表(TransactionTable)的数据,从中找到用于一致性回滚的 UNDO 数据块。我们之前做了两次 UPDATE,尽管这两次的 UNDO 内容都在同一个 UNDO 数据块中(从 UBA 可以看出,有兴趣的读者可以将这个 UNDO 块 dump 出来进行观察),这里有两次’Applying CR undo’,每一条 ITL  entry 都导致了增加了一次对 UNDO 数据块的读(2 次读取UNDO 数据块。)至此,已经完成了 9 次逻辑读:2 次读取表段头,4 次读取表数据块,1次读取回滚段头,2 次读取 UNDO 数据块。

注释:这里,2 次读取UNDO 数据块,是假设该被修改的普通数据块里的被修改的数据行是只是被一个事务所修改,是被该事务里的两次操作所修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值