执行计划之:consistent gets ,db block gets

consistentgets :consistent_gets是从回滚段中读到的前映(或叫读取一致性影象),看见的数据是查询开始的时间点的,所以若存在block在查询开始后发生了变化的情况,则必须产生 before image然后读数据,这就是一致读的含义
查询就是表示 consistent gets (querymode),因为查询要保证所获取的数据的时间点的一致性,所以叫一致读,即使是从当前 buffer 获得的数据,也叫consistent gets ,这仅仅表达一种模式一种期望,并不表示真实的是从 当前buffer 获得 还是从回滚段获取数据产生的bufore image 。

db blockgets : current mode ,不管这个块上的数据是否可能存在 before image ,也就是说不管是否存在回滚中数据可以回滚,只看见当前最新块的数据,即使别人正在更新,也看见别人更新状态的数据,比如dml的时候就不需要看见别人更改前的数据,而是看见正在更改的,当然同时,若操作相同数据则被lock住。也就是说一次查询中看见的数据可能不在同一个时间点上,比如一个大的dml,当dml开始更新一个非常大的表后,这个表更新的过程中,有一个进程去把该表末尾的一个记录更新了,然后这个大更新抵达该记录的时候会被阻塞的,若该进程事物提交,则大更新会覆盖该事务的更新,也就是说,这个大更新所看见的数据是当前的,不具有时间点的一致性,所以叫current mode,个人认为db block gets这个词用的不好, 容易让人误解. 如果改成inconsistentgets可能会更准确一些

 

SQL> alter system flush buffer_cache;


系统已更改。


SQL> set autot

用法: SET AUTOT[RACE] {OFF | ON |TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]

SQL> set autot traceonly stat



SQL> select  *  from  t;


已选择798945行。


统计信息

----------------------------------------------------------

        recursive calls

        db block gets  --这个为0

     63677  consistentgets

     11118  physicalreads

        redo size

  85740332  bytes sent via SQL*Netto client

    586267  bytes received viaSQL*Net from client

     53264  SQL*Net roundtripsto/from client

        sorts (memory)

        sorts (disk)

    798945  rowsprocessed




SQL> select * from  t;


已选择798945行。


统计信息

----------------------------------------------------------

        recursive calls

        db block gets

     69587  consistent gets  --全是一致性得到,因为已经在Buffer_cache中

        physical reads

        redo size

  85740332  bytes sent via SQL*Netto client

    586267  bytes received viaSQL*Net from client

     53264  SQL*Net roundtripsto/from client

        sorts (memory)

        sorts (disk)

    798945  rowsprocessed



SQL> select * from t  for update;


已选择798945行。


统计信息

----------------------------------------------------------

       476 recursive calls

    812439  db block gets --更新时,产生这个

    884932  consistentgets

        physical reads

  160912940 redo size

  73057198  bytes sent via SQL*Netto client

    586267  bytes received viaSQL*Net from client

     53264  SQL*Net roundtripsto/from client

        sorts (memory)

        sorts (disk)

    798945  rowsprocessed


SQL> rollback;


回退已完成。



SQL> alter system flush buffer_cache;


系统已更改。



SQL> select * from t  for update;


已选择798945行。


统计信息

----------------------------------------------------------

       476 recursive calls

    812437  db block gets

    884836  consistentgets

     11122  physicalreads

  160903012 redo size

  73057198  bytes sent via SQL*Netto client

    586267  bytes received viaSQL*Net from client

     53264  SQL*Net roundtripsto/from client

        sorts (memory)

        sorts (disk)

    798945  rowsprocessed


SQL> alter system flush  buffer_cache;


系统已更改。


SQL> desc t;

 名称                                是否为空?类型

 ------------------------------------------------- ---------------------------


 OWNER                                      VARCHAR2(30)

 OBJECT_NAME                                 VARCHAR2(128)

 SUBOBJECT_NAME                              VARCHAR2(30)

 OBJECT_ID                                  NUMBER

 DATA_OBJECT_ID                              NUMBER

 OBJECT_TYPE                                 VARCHAR2(19)

 CREATED                                    DATE

 LAST_DDL_TIME                               DATE

 TIMESTAMP                                  VARCHAR2(19)

 STATUS                                     VARCHAR2(7)

 TEMPORARY                                  VARCHAR2(1)

 GENERATED                                  VARCHAR2(1)

 SECONDARY                                  VARCHAR2(1)



SQL> update t set  owner='a';


已更新798945行。


统计信息

----------------------------------------------------------

      4564 recursive calls

   7008787  db block gets

   1123165  consistent gets

     13434  physicalreads

  555747124 redo size

       683  bytessent via SQL*Net to client

       558  bytesreceived via SQL*Net from client

        SQL*Net roundtrips to/from client

        16 sorts (memory)

        sorts (disk)

    798945  rowsprocessed



SQL> select * from  t;


已选择798945行。


统计信息

----------------------------------------------------------

        recursive calls

        db block gets

     63677  consistentgets 

        physical reads

        redo size

  82886810  bytes sent via SQL*Netto client

    586267  bytes received viaSQL*Net from client

     53264  SQL*Net roundtripsto/from client

        sorts (memory)

        sorts (disk)

    798945  rowsprocessed

可以理解 为:

 

consistent gets : 是由 查询语句产生的,不管所查的数据是否需要构造前镜像,都要算进去

db block gets:  是由update,delete,select for update 产生的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值