ITPub博客

首页 > Linux操作系统 > Linux操作系统 > db block gets 与 consistent read gets

db block gets 与 consistent read gets

原创 Linux操作系统 作者:pingley 时间:2012-05-21 08:32:11 0 删除 编辑
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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26110315/viewspace-730452/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 关于ddl_lock_timeout
请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    169
  • 访问量
    717679