您的位置:首页 > 数据库

db_block_gets和consistent_gets

2013-09-24 10:53 405 查看
db_block_gets:当前请求的块数量

  也称为current_mode,一般发生在dml(update,insert,delete)

  只读取当前时间点最新块的数据,当前时间点读到什么就是什么,不具备数据时间点一致性

  假定更新一个大表过程中,有一个进程修改了最后一条记录,当大表更新抵达的时候,会阻塞,

  若改进程修改提交,则大表更新会覆盖此更新(大表更新会在进程修改的基础上再修改)

consistent_gets:数据请求总数在回滚段buffer中的数据一致性所需要数据块数量
是oracle在查询开始的时候,所获得的数据必须是在时间点上一致的。
假定查询开始的时候所有数据都是已经提交的,查询开始之后,若数据发生了变化,
则查询需要去从回滚段中获得变化前的数据,而若数据没有发生变化,则不用去回滚段中读了。
不管是否去回滚段中读,在概念上来讲,这种数据获取方式都叫 consistent gets 。 
这仅仅表示一种期望,需要获得一致的时间点的数据,为此可能需要去回滚段中获得数据但并不表示一定从回滚段中的到数据

  也称为query_mode, 一般在查询时产生(select)

  

补充:

current mode 和query mode 只不过是2种相对的不同的叫法。对于select 来说,由于oracle 的读一致性特性,

在query mode 下,oracle 从buffer cache 中读到的数据必须是一致的,所以在query mode 下,oracle 可能或者不需要从undo 中读取数据,

所以在query mode 下,就是consistents gets,所以在select 中一般只有consistent gets 而没有db block gets 

而对于DML(insert,delete,update)操作,因为是修改数据就不需要什么一致性读了,就是直接在buffer cache 里面进行修改了,

所以叫做current mode ,就是当前读到什么数据就修改,不需要保证数据库的一致性,因为修改都要将数据进行修改,修改呢?

也是在buffer cache 中完成的,所以就叫做current mode ,为了和query 区别,对Buffer 的访问就叫做db block gets
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  database sql