db block gets 与 consistent read gets

来源:这里教程网 时间:2026-03-03 14:13:54 作者:

转: http://blog.itpub.net/26110315/viewspace-730452/ db block gets 与 consistent read gets 对这两个概念一直模模糊糊,弄清楚这两个概念对于理解logical reads,physical read s至关重要。 consistent read get:从buffer cache 中一致性读取(consistent read)的block 的数量。 db block get :从buffer cache 中读取的current  mode 的block 的数量。 为了更好的理解这两个概念我们得先来说说buffer cache 的模式。         current mode :current mode get 也叫做 db block get,从buffer cache 中检索出来的数据块的数据是当前模式的。 对当前模式我们可以通过下面这个列子来理解。比如一个未提交的事务,更新了一个数据块中的两条记录, db block gets就 够看到这些未提交的记录(因为读取的block是当前状态的)。所以在insert,update,delete 的语句中能够经常看到 db block gets。         consistent mode: consistent read gets 读取的是读一致性的block,因此如果需要读取的数据所在的block 已经被修改 过了,那么将会使用nudo data。比如一个未提交的事务更新了block 中的两条记录,另外一个会话请求该block 中的数据, oracle 将会使用undo data 来提供读一致性。 所以不能看到更新以后的数据。典型情况下,select 语句只会产生读一致性。 扩展:         physical read:指定是使用磁盘IO将数据读入data buffer cache。读入data buffer cache 中的blocks 将会被 consistent read gets. 所以总的读取的blocks(logical I/O)等于db block gets + consistent read gets,明白了这一点对于对于理解 buffer cache hit ratio 也很简单了。 select  1-sum(decode(name,'physical reads',value,0))/            (sum(decode(name,'db block gets',value,0))+           sum(decode(name,'consistent gets',value,0))) "Buffer cache hit ratio" from v$sysstat; 另外对于这个buffer cache hit ratio 不要太在意,因为这和系统当前的工作状态有关系的。 特别是在OLAP系统中更是不要为这个hit ratio 所迷惑,因为OLAP系统的特性决定了hit ratio 不可能很高。 下面就是一个伪造hit ratio 的例子,命中率中80%提高到了98%。但是并不是说这个hit ratio 不重要关键是要明白当前系统 的运行状态,系统的类型。改变解决问题的角度不是从hit ratio 入手,而是通过做其他方面的工作来提高这个hit ratio (如果有必要的话). SQL>  select 1-sum(decode(name,'physical reads',value,0))/   2   (sum(decode(name,'db block gets',value,0))+   3   sum(decode(name,'consistent gets',value,0))) "Buffer cache hit ratio"   4   from v$sysstat; Buffer cache hit ratio ----------------------             .804517936 SQL> ed Wrote file afiedt.buf   1  declare   2    dum dual.dummy%type;   3  begin   4    for i in 1..1000000 loop   5      select dummy into dum   6      from dual;   7    end loop;   8* end; SQL> / PL/SQL procedure successfully completed. SQL> select  1-sum(decode(name,'physical reads',value,0))/   2             (sum(decode(name,'db block gets',value,0))+   3            sum(decode(name,'consistent gets',value,0))) "Buffer cache hit ratio"   4  from v$sysstat; Buffer cache hit ratio ----------------------             .982396189

相关推荐