love wife & love life —Roger的Oracle&MySQL技术博客

Phone:18180207355 提供专业Oracle&MySQL数据恢复、性能优化、迁移升级、紧急救援等服务

about consistent read gets

本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger的Oracle&MySQL技术博客

本文链接地址: about consistent read gets

关于consistent read(简称CR),有网友在问这个问题,虽然看似很容易理解,然而我想不见得大家都明白,在我
查询官方文档的过程中,我也发现我以前的认识是错误的或者说理解不完整,下面是涉及到的几个概念,来自官
方文档:

关于CR read相关的几个我都列出来了,上面信息都来自官方文档,描述是非常准确的。

前面我之所以把逻辑读也列出来了,其实是因为很多朋友有一个错误的认识,例如下面这个执行计划:

该sql执行产生的逻辑读是db block gets+consistent gets=4,不包含recursive calls的。

从上面官方文档的描述,可以看出严格意义上讲,cr read有2种情况,如下:

cleanouts and rollbacks – consistent read gets
cleanouts only – consistent read gets

简单的讲,前面一个是涉及到回滚段的,例如访问的block涉及到dml等操作,就会出现。后面一直是block不涉及到相关事务,
可能已经被写到disk上也可能事务已经,但是可能在buffer cache中,尚未写入到disk。

但是,从sql 执行计划里面反应出来的只有一种,就是onsistent gets。其实这里的onsistent gets就包括上面官方文档所
描述的3种情况:
consistent gets = cleanouts and rollbacks + cleanouts only+ consistent gets

这样描述我感觉有些不准确,consistent gets 其实细分一下我认为就是cleanouts and rollbacks和cleanouts only。

关于consistent gets 也有如下的一种描述:

再通俗一点讲,就是为了数据一致性而产生的io请求数(io单位是block)或或必须读取的block数目。

关于cleanouts only的情况很简单,不多说了,这里用一个例子来描述下cleanouts and rollbacks的情况,如下:

——-event trace

这里针对上述trace 内容进行简单的解释:

xid: 0x0001.014.0000035b xid结构,1为回滚段、014转换为10进制是20,也就是slot号,后面的35b转换为10进制为859,是seq号。

比较一下下面几个scn 就明白了。oracle这里是根据比较几个scn 去决定是否进行cr read的。

undo Tx slot scn 004d390c –> 5060876
commit scn 004d3923 –> 5060899
block scn 004d3924 –> 5060900

最后还有几个概念,例如consistent changes、CR blocks created 大家自己去研究琢磨琢磨!

One Response to “about consistent read gets”

  1. Dong_2 Says:

Leave a Reply

You must be logged in to post a comment.