一致读次数,不是block数。
在处理这个操作的时候需要在一致性读状态上处理多少个块,这些块产生的主要原因是因为由于在你查询的过
程中,由于其他会话对数据块进行操作,而对所要查询的块有了修改,但是由于我们的查询是在这些修改之前调
用的,所以需要对回滚段中的数据块的前映像进行查询,以保证数据的一致性。这样就产生了一致性读.
--------------------------------------------
查询时涉及的每一block都是Consistent Read, 只是有些CR(Consistent Read)需要使用undo 来进行构造(这就是上
面第一段话的这种情形), 大部分CR(Consistent Read)并不涉及到undo block的读..
还有就是每次读这个block都是一次CR(可能每个block上有多个数据row), 也就是如果某个block被读了10次, 系统会
记录10个Consistent Read. 这也是为什么读的数据量大的时候index查询比较全表扫描慢的一个重要原因.
--------------------------------------------
Consistent Read与update等没有直接关系。dml对block作变更产生current Read. 直接放到dirty list上等待dbwr写..
如果dml的时间很长的话,,可能会直接写到数据文件(即使没有提交), 如果最后commit的话, 就不会再将这个block读出
清理itl信息, rollback的话需要将这个block读出恢复变更前的信息, 再回滚..
---------------------------------------------
SQL Trace 优化SQL的时候注意,逻辑读固然重要,但还要看物理读, 排序等操作...
---------------------------------------------
不必考虑物理读,它本身就是逻辑读的一部分,对于所有的sql,除了第一次之外,之后的读取都是公平的。
第二个显然处理的数据要多於第一个,并且有2次排序。
为了准确,可以用10046 trace一下看看。
sql> alter session set event '10046 trace name context forever';
然后到udump下找trace文件
tkprof tracefile 。
===============================================
对'Consistent Gets',''Physical Reads'和'DB Block Gets'的理解
===========================================================
作者: jolly10(http://jolly10.itpub.net)
发表于:2008.04.25 17:29
分类: linux学习笔记
出处:http://jolly10.itpub.net/post/7268/460574
---------------------------------------------------------------
在Oracle的文档中有这样一段解释:
db block gets:Number of times a CURRENT block was requested.
consistent gets:Number of times a consistent read was requested for a block.
physical reads:Total number of data blocks read from disk. This number equals the value of "physical reads direct" plus all reads into buffer cache.
---------------------------------------------------------------针对以上3个概念进行的说明解释及关系如下:
1、DB Block Gets(当前请求的块数目)
当前模式块意思就是在操作中正好提取的块数目,而不是在一致性读的情况下而产生的块数。正常的情况下,一个查询提取的块是在查询开始的那个时间点上存在的数据块,当前块是在这个时刻存在的数据块,而不是在这个时间点之前或者之后的数据块数目。
我的理解这部分的数目包括直接在buffer中取到的数目和 物理读的block数目.
2、Consistent Gets(数据请求总数在回滚段Buffer中的数据一致性读所需要的数据块)
这里的概念是在处理你这个操作的时候需要在一致性读状态上处理多少个块,这些块产生的主要原因是因为由于在你查询的过程中,由于其他会话对数据块进行操 作,而对所要查询的块有了修改,但是由于我们的查询是在这些修改之前调用的,所以需要对回滚段中的数据块的前映像进行查询,以保证数据的一致性。这样就产 生了一致性读。
比较好理解直接在rollback中读的block数目.
3、Physical Reads(物理读)
就是从磁盘上读取数据块的数量,其产生的主要原因是:
1、 在数据库高速缓存中不存在这些块
2、 全表扫描
3、 磁盘排序
物理读的block数目.
它们三者之间的关系大致可概括为:
逻辑读指的是Oracle从内存读到的数据块数量。一般来说是'consistent gets' + 'db block gets'。当在内存中找不到所需的数据块的话就需要从磁盘中获取,于是就产生了'phsical reads'。
求cache hit用:
SELECT SUM(DECODE(a.NAME, 'consistent gets', a.VALUE, 0)) "Consistent Gets",
SUM(DECODE(a.NAME, 'db block gets', a.VALUE, 0)) "DB Block Gets",
SUM(DECODE(a.NAME, 'physical reads', a.VALUE, 0)) "Physical Reads",
ROUND(((SUM(DECODE(a.NAME, 'consistent gets', a.VALUE, 0)) +
SUM(DECODE(a.NAME, 'db block gets', a.VALUE, 0)) -
SUM(DECODE(a.NAME, 'physical reads', a.VALUE, 0)) )/
(SUM(DECODE(a.NAME, 'consistent gets', a.VALUE, 0)) +
SUM(DECODE(a.NAME, 'db block gets', a.VALUE, 0))))
*100,2) "Hit Ratio %"
FROM v$sysstat a;
同等于:
SELECT SUM(DECODE(a.NAME, 'consistent gets', a.VALUE, 0)) "Consistent Gets",
SUM(DECODE(a.NAME, 'db block gets', a.VALUE, 0)) "DB Block Gets",
SUM(DECODE(a.NAME, 'physical reads', a.VALUE, 0)) "Physical Reads",
ROUND((1- SUM(DECODE(a.NAME, 'physical reads', a.VALUE, 0)) /(SUM(DECODE(a.NAME, 'consistent gets', a.VALUE, 0)) +
SUM(DECODE(a.NAME, 'db block gets', a.VALUE, 0))))*100,2) "Hit Ratio %" FROM v$sysstat a
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-430027/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-430027/
本文详细解析了Oracle数据库中的DBBlockGets、ConsistentGets和PhysicalReads三个关键指标的概念及其相互间的关系。通过实例帮助读者理解数据库在处理查询时如何区分当前块与一致性读块,以及如何衡量缓存命中率。
2595

被折叠的 条评论
为什么被折叠?



