ITPub博客

首页 > 数据库 > Oracle > db block gets 与 consistent read gets

db block gets 与 consistent read gets

Oracle 作者:studywell 时间:2019-09-28 16:11:49 0 删除 编辑

转: 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


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

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-03-04

  • 博文量
    305
  • 访问量
    429538